如何解决下一次身份验证 - OAUTH_GET_ACCESS_TOKEN_ERROR
我正在尝试在我的 next.js 应用程序中实现 oauth。对于后端,我将 Django ODIC Provider 和 Next Auth 用于前端。
但我收到一个错误:
{
"error": "invalid_grant","error_description": "The provided authorization grant or refresh token is invalid,expired,revoked,does not match the redirection URI used in the authorization request,or was issued to another client"
}
我该如何解决这个问题?
我在 [...nextauth].js
中创建了一个名为:/api/auth/
的文件并添加了我的自定义提供程序。
这是我的 env
的样子:
NEXTAUTH_URL = http://localhost:3000
CLIENT_ID = 466647
CLIENT_SECRET = 079e7fe518e245cb316701faa19ec463c0073fba25d1e51c2db996ab
SCOPES = openid profile email
和[...nextauth].js
:
import NextAuth from 'next-auth'
export default NextAuth({
providers: [
{
id: "pullstream",name: "Pullstream",type: "oauth",version: "2.0",scope: process.env.SCOPES,params: { grant_type: "authorization_code" },accessTokenUrl: "https://accounts.dev.pullstream.com/api/openid/token/",requestTokenUrl: "https://accounts.dev.pullstream.com/api/accounts/login/",authorizationUrl: "https://accounts.dev.pullstream.com/api/openid/authorize/",profileUrl: "https://accounts.dev.pullstream.com/api/accounts/profile/",async profile(profile,tokens) {
console.log(profile,tokens)
},clientId: process.env.CLIENT_ID,clientSecret: process.env.CLIENT_SECRET
}
],})
解决方法
您可以使用 callbacks
的 [...nextauth].js
配置来获取 access_token
。
...
callbacks: {
/**
* @param {object} token Decrypted JSON Web Token
* @param {object} user User object (only available on sign in)
* @param {object} account Provider account (only available on sign in)
* @param {object} profile Provider profile (only available on sign in)
* @param {boolean} isNewUser True if new user (only available on sign in)
* @return {object} JSON Web Token that will be saved
*/
async jwt(token,user,account,profile,isNewUser) {
// Add access_token to the token right after signin
if (account?.accessToken) {
token.accessToken = account.accessToken
}
return token
}
}
...
内容用户、帐户、个人资料和 isNewUser 将根据提供商以及您是否使用数据库而有所不同。如果要将用户 ID、OAuth 访问令牌等数据传递给浏览器,可以将其持久化在令牌中并使用 session()
回调返回。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。