mirror of
https://github.com/SrIzan10/next-auth.git
synced 2026-05-01 10:55:20 +00:00
* refactor: extend res.{end,send,json}, redirect
* refactor: chain res methods, remove unnecessary ones
* refactor: simplify oauth callback signature
* refactor: code simplifications
* refactor: re-export everything from routes in one
* refactor: split up main index.js to multiple files
* refactor: simplify passing of provider(s) around
* refactor: extend req with callbackUrl inline
* refactor: simplify page rendering
* refactor: move error page redirects to main file, simplify renderer
* refactor: inline req.options definition
* refactor: simplify error fallbacks
* refactor: remove else branches and unnecessary try..catch
* refactor: add docs, and simplify jwt functions
* refactor: prefer errors object over switch..case in signin page
* feat: log all params sent to logger instead of only first
* refactor: fewer lines input validation
* refactor: remove even more unnecessary else branches
34 lines
1.5 KiB
JavaScript
34 lines
1.5 KiB
JavaScript
import * as cookie from '../lib/cookie'
|
|
|
|
/**
|
|
* Get callback URL based on query param / cookie + validation,
|
|
* and add it to `req.options.callbackUrl`.
|
|
* @note: `req.options` must already be defined when called.
|
|
*/
|
|
export default async function callbackUrlHandler (req, res) {
|
|
const { query } = req
|
|
const { body } = req
|
|
const { cookies, baseUrl, defaultCallbackUrl, callbacks } = req.options
|
|
|
|
// Handle preserving and validating callback URLs
|
|
// If no defaultCallbackUrl option specified, default to the homepage for the site
|
|
let callbackUrl = defaultCallbackUrl || baseUrl
|
|
// Try reading callbackUrlParamValue from request body (form submission) then from query param (get request)
|
|
const callbackUrlParamValue = body.callbackUrl || query.callbackUrl || null
|
|
const callbackUrlCookieValue = req.cookies[cookies.callbackUrl.name] || null
|
|
if (callbackUrlParamValue) {
|
|
// If callbackUrl form field or query parameter is passed try to use it if allowed
|
|
callbackUrl = await callbacks.redirect(callbackUrlParamValue, baseUrl)
|
|
} else if (callbackUrlCookieValue) {
|
|
// If no callbackUrl specified, try using the value from the cookie if allowed
|
|
callbackUrl = await callbacks.redirect(callbackUrlCookieValue, baseUrl)
|
|
}
|
|
|
|
// Save callback URL in a cookie so that can be used for subsequent requests in signin/signout/callback flow
|
|
if (callbackUrl && (callbackUrl !== callbackUrlCookieValue)) {
|
|
cookie.set(res, cookies.callbackUrl.name, callbackUrl, cookies.callbackUrl.options)
|
|
}
|
|
|
|
req.options.callbackUrl = callbackUrl
|
|
}
|