- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在使用 Django Rest Framework 开发带有自定义后端的 Next.js 应用程序,主要关注社交平台(Google、Github 等)的身份验证。这是我想要使用的流程:
dj-rest-auth
和 django-allauth
设置以处理社交身份验证。 index.tsx
import React, { useEffect } from "react";
import { signIn, signOut, useSession } from "next-auth/client";
import { Typography, Button, Box } from "@material-ui/core";
import { makeUrl, BASE_URL, SOCIAL_LOGIN_ENDPOINT } from "../urls";
import axios from "axios";
axios.defaults.withCredentials = true;
function auth() {
const [session, loading] = useSession();
useEffect(() => {
const getTokenFromServer = async () => {
// TODO: handle error when the access token expires
const response = await axios.post(
// DRF backend endpoint, api/social/google/ for example
// this returns accessToken and refresh_token in the form of HTTPOnly cookies
makeUrl(BASE_URL, SOCIAL_LOGIN_ENDPOINT, session.provider),
{
access_token: session.accessToken,
id_token: session.idToken,
},
);
};
if (session) {
getTokenFromServer();
}
}, [session]);
return (
<React.Fragment>
<Box
display="flex"
justifyContent="center"
alignItems="center"
m={5}
p={5}
flexDirection="column"
>
{!loading && !session && (
<React.Fragment>
<Typography variant="button">Not logged in</Typography>
<Button
variant="outlined"
color="secondary"
onClick={() => signIn()}
>
Login
</Button>
</React.Fragment>
)}
{!loading && session && (
<React.Fragment>
<Typography>Logged in as {session.user.email}</Typography>
<pre>{JSON.stringify(session, null, 2)}</pre>
<Button
variant="outlined"
color="primary"
onClick={() => signOut()}
>
Sign Out
</Button>
</React.Fragment>
)}
</Box>
</React.Fragment>
);
}
export default auth;
api/auth/[...nextauth].ts
import NextAuth from "next-auth";
import { InitOptions } from "next-auth";
import Providers from "next-auth/providers";
import { NextApiRequest, NextApiResponse } from "next";
import axios from "axios";
import { BASE_URL, SOCIAL_LOGIN_ENDPOINT, makeUrl } from "../../../urls";
import { AuthenticatedUser, CustomSessionObject } from "../../../types";
import { GenericObject } from "next-auth/_utils";
const settings: InitOptions = {
providers: [
Providers.Google({
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
authorizationUrl:
"https://accounts.google.com/o/oauth2/v2/auth?prompt=consent&access_type=offline&response_type=code",
}),
],
secret: process.env.NEXT_AUTH_SECRET,
session: {
maxAge: 6 * 60 * 60, // 6 hours
},
callbacks: {
async signIn(user: AuthenticatedUser, account, profile) {
if (account.provider === "google") {
const { accessToken, idToken, provider } = account;
user.accessToken = accessToken;
user.idToken = idToken;
user.provider = provider;
return true;
}
return false;
},
async session(session: CustomSessionObject, user: AuthenticatedUser) {
session.accessToken = user.accessToken;
session.idToken = user.idToken;
session.provider = user.provider;
return session;
},
async jwt(token, user: AuthenticatedUser, account, profile, isNewUser) {
if (user) {
token.accessToken = user.accessToken;
token.idToken = user.idToken;
token.provider = user.provider;
}
return token;
},
},
};
export default (req: NextApiRequest, res: NextApiResponse) => {
return NextAuth(req, res, settings);
};
session 对象是否足够安全以存储 token 这一事实让我感到压力很大。我还想实现一种机制,在访问 token 过期时使用刷新 token 刷新访问 token 。
最佳答案
关于authentication - 这是将 Next.js + NextAuth 与 Django Rest Framework API 连接的正确且安全的方式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66288809/
我目前正在使用NextAuth和Swe在我的Next.js13应用程序中实现以太登录功能。但是,我遇到了客户端和服务器端的CSRF令牌不匹配的问题。以下是相关的代码片段:。在app/api/auth/
我将 nextAuth 与我自己的用户数据库 (mongoDb) 一起使用,我希望此人能够使用他们的凭据登录。问题是我的用户对象没有被保存在状态中,这似乎是 nextAuth 的人为了阻止用户名和密码
我正在尝试使用凭据(电子邮件和密码)实现 NextAuth。 我已经为此设置了我的 mongodb。我还设置了 /api/proile/ 路由来发布登录凭据并使用 Postman 对其进行了测试,正确
我正在使用 next/auth 开发登录系统,并使用仅限邀请的系统实现了凭据记录系统。有没有办法将重置密码链接添加到生成的 /api/auth/signin 页面? 最佳答案 最好的办法是创建自己的自
我想做一个从 domain1.com 到 domain2.com 的 XHR。 domain2.com 是一个使用 NextAuth 的 NextJS 应用程序。 问题是,当我执行此请求时,不包括域
我正在尝试在我的 NextJs 应用程序中实现 NextAuth。我正在关注官方文档。但出于某种原因,似乎用户 session 对象不是在登录时生成的。 这是我的 pages/api/auth/[..
我正在为我的 NextJS 应用程序使用 NextAuth。使用 NextAuth 时,它会在登录时重定向到自己的登录页面,或者我们可以添加自己的自定义登录页面,但我想要做的是登录而不直接从主页重定向
由于访问 token 的默认有效时间为 1 小时,因此我尝试让刷新 token 在我的应用程序中工作。我已经被这个问题困扰了几个星期,而且似乎无法解决它。我已经验证了我的 refreshAccessT
由于访问 token 的默认有效时间为 1 小时,因此我尝试让刷新 token 在我的应用程序中工作。我已经被这个问题困扰了几个星期,而且似乎无法解决它。我已经验证了我的 refreshAccessT
在尝试访问后端(Apollo GraphQL)时清除 NextAuth.js session 的最佳方法是什么,并且由于 token 已过期或无效而返回 401? 我想到了 errorLink 和 s
我一直在使用 Django Rest Framework 开发带有自定义后端的 Next.js 应用程序,主要关注社交平台(Google、Github 等)的身份验证。这是我想要使用的流程: 让 Ne
我正在尝试构建一个实现NextAuth的NextJS应用程序。在配置回调时,我在我的[...nextauth].ts中遇到以下错误:。代码的完整回调部分如下所示:。我正在使用CredentialPro
我将Next.js与NextAuth.js一起使用,并设置了Amazon Cogito,我的问题是,当我在注销后立即单击登录链接时,我的用户会直接登录,而不会被要求提供凭据。。我的[...nextau
我是一名优秀的程序员,十分优秀!