Httponly cookies migration. continuation of UI PR.#34
Open
Httponly cookies migration. continuation of UI PR.#34
Conversation
…and incorporate light and dark
…and incorporate light and dark
…sal deletion on frontend, not implemented on backend.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
localStorage/sessionStorageto httpOnly cookies, eliminating XSS token theft as tokens are no longer accessible to JavaScript/dashboardwith no path to link a bank accountWhat changed
Server
@fastify/cookieplugin inapp.tsloginsetsaccessTokenandrefreshTokenas httpOnly, Secure, SameSite=Strict cookies; response body now contains only{ user }logoutreadsrefreshTokenfrom cookie instead of request body; clears both cookies on successrefreshreadsrefreshTokenfrom cookie, rotates both tokens viaSet-Cookie, returns{ success: true }verifyJWTpreHandler reads fromrequest.cookies.accessTokeninstead ofAuthorizationheaderrefreshTokenfromlogoutSchemaandrefreshSchemarequest bodies; updated response schemasClient
sessionStorage/localStorage,setTokens,clearTokens,getAccessToken)credentials: 'include'to allfetch()calls so the browser automatically sends cookiesAuthProvideralways checks session on mount viaGET /api/auth/verify;login()reads user from response bodyLanding.tsxnow redirects to/link-bankwhenagentBudgetApprovedis false instead of always sending authenticated users to/dashboardTests
headers: { authorization: 'Bearer ...' }→cookies: { accessToken: token }@fastify/cookieregistered in every test app builder that exercises protected routesTest plan
/api/auth/verifyis expected and silent)/link-bankbased on onboarding statenpm testin/servernpm run lint && npm run buildin/clientnpm run lint && npm run buildin/server