所以我在我的Next.js应用程序中创建了身份验证逻辑。我创建了/api/auth/login
页面,在那里我处理请求,如果用户的数据是好的,我创建了一个带有JWT令牌的httpOnly
cookie,并将一些数据返回到前端。这部分工作正常,但我需要一些方法来保护某些页面,只有登录的用户才能访问它们,我在为此创建HOC时遇到了问题。
我看到的最好的方法是使用getInitialProps
,但在Next.js网站上说我不应该再使用它了,所以我想使用getServerSideProps
,但这也不起作用,或者我可能做错了什么。
这是我的HOC代码:(cookie存储在userToken
名称下)
import React from 'react';
const jwt = require('jsonwebtoken');
const RequireAuthentication = (WrappedComponent) => {
return WrappedComponent;
};
export async function getServerSideProps({req,res}) {
const token = req.cookies.userToken || null;
// no token so i take user to login page
if (!token) {
res.statusCode = 302;
res.setHeader('Location', '/admin/login')
return {props: {}}
} else {
// we have token so i return nothing without changing location
return;
}
}
export default RequireAuthentication;
字符串
如果你有任何其他的想法如何在Next.js中使用cookie处理auth,我将非常感谢帮助,因为我是服务器端渲染react/auth的新手。
3条答案
按热度按时间ztyzrc3y1#
您应该将身份验证逻辑从
getServerSideProps
分离并提取到可重用的高阶函数中。例如,您可以让以下函数接受另一个函数(您的
getServerSideProps
),如果未设置userToken
,则会重定向到您的登录页面。字符串
然后,您可以通过 Package
getServerSideProps
函数在页面中使用它。型
9cbw7uwe2#
基于Julio的回答,我将其用于
iron-session
:字符串
然后我用它像:
型
我的
withSessionSsr
函数看起来像:型
pw9qyyiw3#
对于任何使用TRPC,并希望使用HOC进行auth逻辑的人,这是我们的方法,请注意我们只创建一次助手:
字符串