Troubleshooting
Common issues and solutions.
Login Issues
Cannot Log In
Symptoms: Login fails with "Invalid credentials"
Solutions:
- Verify username and password are correct
- Check Caps Lock is not on
- Try resetting password
- Contact IT if account may be locked
Session Expired
Symptoms: Redirected to login unexpectedly
Solutions:
- Log in again -- sessions expire after 4 hours by default (12 hours maximum)
- Check if you were inactive too long
- Clear browser cache and cookies
- If using multiple tabs, a logout in one tab invalidates the session everywhere
Access Denied
Symptoms: "You don't have permission" message
Solutions:
- Verify you have the correct role
- Contact administrator for access
- Check if role assignment has expired
Registration Issues
Cannot Register for Course
Symptoms: "Unable to add course" error
Common Causes and Solutions:
| Error | Cause | Solution |
|---|---|---|
| Hold on Account | Registration hold exists | Check holds and resolve |
| Prerequisite Not Met | Missing required course | Complete prerequisite or request override |
| Section Full | No seats available | Join waitlist or find another section |
| Time Conflict | Schedule overlap | Choose different section |
| Max Credits | Exceeds credit limit | Drop another course or request override |
| Not in Registration Window | Outside registration dates | Wait for your registration time |
Hold Won't Clear
Symptoms: Hold still showing after resolution
Solutions:
- Some holds require manual clearing
- Contact the department that placed the hold
- Allow time for processing (financial holds may take 24 hours)
Waitlist Issues
Symptoms: Not receiving waitlist notifications
Solutions:
- Check spam/junk folder
- Verify email address is correct
- Ensure notification preferences are enabled
- Monitor portal directly
Grade Issues
Grades Not Showing
Symptoms: Expected grades not appearing
Solutions:
- Grades may not be posted yet - check deadline
- Some holds block grade viewing
- Contact instructor if past deadline
GPA Incorrect
Symptoms: GPA calculation seems wrong
Solutions:
- Review GPA calculation rules
- Check for repeat courses affecting GPA
- Verify credit hours are correct
- Contact Registrar for verification
Degree Audit Issues
Requirements Not Satisfied
Symptoms: Course not counting toward requirement
Solutions:
- Course may not match requirement criteria
- Grade may not meet minimum
- May need substitution request
- Contact advisor for review
Audit Not Loading
Symptoms: Degree audit shows error or won't load
Solutions:
- Refresh the page
- Try different browser
- May be temporary system issue
- Contact IT if persists
Billing Issues
Balance Incorrect
Symptoms: Account balance doesn't match expected
Solutions:
- Review transaction history
- Check for pending aid
- Verify enrollment matches charges
- Contact Student Accounts
Payment Not Reflected
Symptoms: Payment made but balance unchanged
Solutions:
- Allow 1-2 business days for processing
- Check payment confirmation
- Contact Student Accounts with receipt
Technical Issues
Page Not Loading
Symptoms: Blank page or error message
Solutions:
- Refresh the page
- Clear browser cache
- Try different browser
- Check internet connection
- System may be in maintenance
Data Not Saving
Symptoms: Changes not persisting
Solutions:
- Check for validation errors
- Ensure all required fields completed
- Check internet connection
- Try refreshing and re-entering
Slow Performance
Symptoms: System responding slowly
Solutions:
- Check internet connection
- Close unnecessary browser tabs
- Try different browser
- May be high system usage period
Browser Issues
Recommended Browsers
- Chrome (latest)
- Firefox (latest)
- Edge (latest)
- Safari (latest)
Common Browser Fixes
- Clear cache and cookies
- Disable browser extensions
- Update browser to latest version
- Try incognito/private mode
Common Developer Issues
Issues encountered when developing or running the SDASIS application locally.
Valkey/Redis Connection Required for Auth
Symptoms: Login fails immediately, or the backend logs show NOAUTH, connection refused, or dial tcp: connect: connection refused errors on startup.
Cause: The authentication system stores sessions in Valkey (Redis-compatible). There is no token blacklist — sessions are records that exist or do not. If Valkey is unreachable, session lookup fails and every authenticated request is rejected with 401. That is deliberate: authentication fails closed, so a cache outage cannot become a bypass.
Solutions:
- Ensure Valkey or Redis is running locally on the configured port (default
localhost:6379) - Check the
.envvalues forREDIS_URL,REDIS_PASSWORD, andREDIS_DB - If using Docker:
docker run -d --name valkey -p 6379:6379 valkey/valkey:latest - If Valkey is running but requires a password, set
REDIS_PASSWORDin.env - If the container is running and the error is
i/o timeoutrather thanconnection refused, something else is holding the IPv6 loopback. On Windows,localhostresolves to::1before127.0.0.1, and a stalewslrelay.execan listen on[::1]:6379, accept the connection, and never answer — the dial succeeds, then the client's read times out. Diagnose withnetstat -ano | findstr :6379(look for two different PIDs) and setREDIS_URL=127.0.0.1:6379to bypass it.
CSRF Token Mismatch
Symptoms: 403 Forbidden or "CSRF token mismatch" on POST/PUT/DELETE requests from the frontend.
Cause: The backend sets a CSRF token in a cookie, and the frontend must send it back in the X-CSRF-Token request header. A mismatch occurs when the cookie is missing, stale, or the header is not being sent.
Solutions:
- Ensure the frontend Axios instance includes
withCredentials: trueso cookies are sent cross-origin - Verify the Axios request interceptor reads the CSRF cookie and attaches it as the
X-CSRF-Tokenheader - Check that
CORS_ALLOW_CREDENTIALS=truein the backend.env - Check that the frontend origin is listed in
CORS_ALLOWED_ORIGINS - Clear cookies and log in again to get a fresh CSRF token
Session Expired (4h Default, 12h Max)
Symptoms: API returns 401 Unauthorized after a period of inactivity.
Cause: Sessions have a default idle timeout of 4 hours, set by SESSION_TTL in .env. It is lowered by the System Settings Session Timeout and, further, by the acting role's Idle timeout on Administration > Roles: GET /auth/me returns the value in force as session_timeout_minutes. There is no JWT and no JWT_ACCESS_TOKEN_LIFETIME setting — if you find one in an old .env, it does nothing.
With SESSION_SLIDING_EXPIRATION enabled the TTL is extended on each request, but an absolute 12-hour cap is compiled in and is not configurable, so a session ends after 12 hours regardless of activity.
Solutions:
- For development convenience, increase
SESSION_TTLin.env(e.g.12h) — values above 12 hours have no effect because of the absolute cap - The frontend should detect 401 responses and redirect to the login page
- There is no refresh endpoint and no refresh token; a session is renewed by the sliding window or not at all
CORS Configuration for Cookie-Based Auth
Symptoms: Browser console shows CORS errors like Access-Control-Allow-Origin missing, or cookies are not being sent/received.
Cause: Cookie-based authentication requires specific CORS configuration. Browsers enforce stricter rules when credentials (cookies) are involved.
Solutions:
- In the backend
.env, set:CORS_ALLOWED_ORIGINS=http://localhost:5173,http://127.0.0.1:5173 CORS_ALLOW_CREDENTIALS=true - The
Access-Control-Allow-Originheader cannot be*when credentials are used -- it must be the exact origin - Ensure the frontend uses
withCredentials: trueon all Axios requests - If testing from a different port or hostname, add it to
CORS_ALLOWED_ORIGINS - When deploying behind a reverse proxy (Caddy, Nginx), ensure the proxy passes the
Originheader through
lib/pq Connection String Format
Symptoms: Backend fails to start with pq: ... errors, or connection refused, password authentication failed, or database "sis" does not exist.
Cause: The Go backend uses lib/pq for PostgreSQL connections. The connection parameters are built from individual .env variables, not a single connection string.
Solutions:
- Verify all database variables in
.env:DB_HOST=127.0.0.1 DB_PORT=5432 DB_USER=postgres DB_PASSWORD=postgres DB_NAME=sis DB_SSLMODE=disable - Ensure PostgreSQL is running and accepting connections on the configured host/port
- Verify the database exists:
psql -h 127.0.0.1 -U postgres -c "SELECT 1" sis - If using
DB_SSLMODE=disablelocally, ensure your PostgreSQL instance does not require SSL - The
lib/pqdriver constructs a DSN like:host=127.0.0.1 port=5432 user=postgres password=postgres dbname=sis sslmode=disable - For
DB_MAX_CONNS, the default is 25. Reduce if running multiple services on a small dev machine
Hot Reload Not Working (Air)
Symptoms: Code changes are not reflected without manual restart.
Solutions:
- Ensure Air is installed:
go install github.com/air-verse/air@latest - Run
airfrom thesis_backendgo/directory (not from the project root) - Check
.air.tomlfor excluded paths that might be blocking detection - On Windows, file watchers can be unreliable with some editors -- try saving the file again
Frontend Dev Server Proxy Issues
Symptoms: API calls from the frontend return 404 or connection errors in development.
Solutions:
- Ensure the Go backend is running on port 8000
- Check that the Vite proxy configuration in
vite.config.tspoints tohttp://localhost:8000 - Verify the Axios base URL in
src/api/index.tsmatches the expected API path
Getting Help
If issues persist:
- Students: Contact Registrar or IT Help Desk
- Faculty: Contact IT Help Desk
- Administrators: Contact System Administrator
Provide:
- Description of the issue
- Steps to reproduce
- Error messages (screenshot if possible)
- Browser and device information