Conversation
Adds nullable, unique, indexed orcid_id column (String(20)) to the users table for ORCID iD storage. Includes format validation (XXXX-XXXX-XXXX-XXXX with optional X checksum) via @validates decorator and standalone function. 14 tests covering validation, uniqueness, NULL handling, and backward compat. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The orcid_id migration shared revision ID a1b2c3d4e5f6 with the slug/publication_year migration, causing 'Multiple head revisions' error during CI. Assign unique revision ID 596bb368fc0d. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Implement full ORCID OAuth2 flow with three routes: - GET /auth/orcid: redirects to ORCID authorize URL with CSRF state - GET /auth/orcid/callback: exchanges code for token, handles login/register/link - GET /auth/orcid/unlink: removes ORCID from account (blocked if no password) Includes 13 unit tests covering all OAuth scenarios with mocked httpx. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Deploy Previewhttps://scroll-press-pr-40.fly.dev This preview will be destroyed when the PR is closed. |
Needs human reviewWhat changed: Added ORCID OAuth2 authentication — users can now sign in/register via ORCID, and link/unlink ORCID to existing accounts. New Review checklist:
What to look for:
|
Needs human reviewWhat changed: Added ORCID OAuth2 authentication — users can now sign in/register via ORCID, and existing users can link/unlink their ORCID iD from account settings. Review checklist:
What to look for:
|
Needs human reviewWhat changed: Added ORCID OAuth2 authentication — users can now sign in, create accounts, or link/unlink their ORCID iD. Includes a new DB migration adding Review checklist:
What to look for:
|
Addresses reviewer feedback: the ORCID OAuth2 backend routes existed but had no UI entry points. Adds ORCID buttons on login/register pages with an "or" divider, and link/unlink controls in the dashboard's account management section. Fixes redirect targets from nonexistent /settings to /dashboard. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Needs human reviewWhat changed: Added ORCID OAuth2 authentication — "Sign in/up with ORCID" buttons on login and register pages, plus ORCID link/unlink controls on the dashboard. New DB migration adds Review checklist:
What to look for:
|
…view)
The buttons were wrapped in {% if orcid_client_id %} which hid them when
ORCID_CLIENT_ID env var wasn't set (e.g. on PR preview deploys). Now buttons
always render; the route handler guards against unconfigured ORCID credentials.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Needs human reviewWhat changed: Added ORCID OAuth2 authentication — new "Sign in/up with ORCID" buttons on login and register pages, and an ORCID link/unlink section on the dashboard. Review checklist:
What to look for:
|
…ages When ORCID OAuth fails (e.g. not configured, state mismatch, token error), the redirect includes an error query param that was silently ignored. Now login, register, and dashboard pages display user-friendly error banners. Dashboard also shows success messages for link/unlink operations. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Needs human reviewWhat changed: Added ORCID OAuth2 authentication — users can now sign in/up via ORCID, and link/unlink ORCID from their dashboard. Review checklist:
What to look for:
|
|
Steps 1-4 worked. Clicking on "Link ORCID" redirected me to the homepage |
When a logged-in user triggers an ORCID error (e.g. not configured, token failure), redirect to /dashboard with the error instead of /login. Previously /login detected the active session and bounced to /, losing the error message. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Needs human reviewWhat changed: Added ORCID OAuth2 authentication — "Sign in/up with ORCID" buttons on login and register pages, plus an ORCID link/unlink section on the dashboard. Review checklist:
What to look for:
|



Summary
/auth/orcid(redirect),/auth/orcid/callback(token exchange + login/register/link),/auth/orcid/unlink(remove ORCID)Test plan
🤖 Generated with Claude Code