Nextjs服务端中存入cookie 全站使用然后跳转getServerSideProps

"react": "^18",
"next": "13.5.4",
import { parse, serialize } from 'cookie';

export async function getServerSideProps(context:GetServerSidePropsContext) {
    const cookies = parse(context.req.headers.cookie || '');
    const authState = cookies['U_S'] || 0;

    const {query} = context;
    const {obj} = query;


    // const objString = JSON.stringify(obj);
    if (obj && typeof obj === 'string') {
        context.res.setHeader('Set-Cookie', [
            serialize('U_S', obj, {path: '/', maxAge: 30 * 24 * 60 * 60}),
            serialize('U_TOKEN', JSON.parse(obj).token, {path: '/', maxAge: 30 * 24 * 60 * 60}),
        ]);

        // 返回重定向到 /index 的信息
        return {
            redirect: {
                destination: '/',
                permanent: false,
            },
        };
    }


    try {
        const {get, post} = useRequest();
        const postData = {};
        const result = await post<{ code: string; data: any }>(P_PRODUCT_CATEGORY, postData);

        if (result.data.code === '00000') {
            const data = result.data.data;
            return {
                props: {
                    authStates: authState,
                    data,
                },
            };
        }
    } catch (error) {
        console.error('Error making POST request:', error);
    }

    return {
        props: {
            authStates: authState,
            data: [],
        },
    };
}

### 使用Postman模拟登录并处理重定向 在Web应用程序中,登录通常涉及向服务器发送凭证(用户名和密码),接收身份验证令牌或会话ID,并可能经历一次或多于一次的HTTP重定向。为了使用Postman有效地模拟这一过程,需遵循特定的方法来管理请求之间的状态以及响应中的重定位。 #### 设置环境变量以存储敏感数据 对于安全性和灵活性考虑,在Postman内创建一组专门针对目标API服务配置好的环境变量是非常重要的[^3]。这些变量可用于保存诸如URL端点、用户凭据等信息而不必硬编码到具体的请求里。这不仅提高了安全性也方便了不同环境下快速切换参数设定。 #### 构建初始POST请求执行登录动作 构建一个`POST`类型的HTTP请求指向应用的服务端登录接口路径。此请求体应包含必要的表单字段如`username` 和 `password` 。确保勾选“Follow Redirects”的选项以便自动跟随任何由服务器发起的位置改变指令;然而如果遇到某些特殊场景下需要手动控制,则关闭该设置并在后续步骤中自行解析Location头部来进行跳转逻辑编写。 ```json { "email": "{{loginEmail}}", "password": "{{loginPassword}}" } ``` 上述JSON结构展示了怎样利用之前定义过的环境变量作为实际提交的数据项的一部分[^1]。 #### 处理返回的身份验证Token或其他形式Session ID 成功完成上一步骤之后,来自服务器回应头里的Set-Cookie或者Authorization部分可能会携带新建立起来的安全上下文标识符。此时应该提取它们并将之存入相应的环境属性之中供以后调用其他受保护资源时附带过去证明客户端已通过鉴权校验: - 对于基于Cookies的身份验证方案可以直接借助内置函数`pm.cookies.get()`获取指定名称下的cookie值; - 如果是JWT(JSON Web Token)或者其他自定义token机制则可通过访问response body 或者 headers 来捕获相应的内容再更新至全局变量空间。 ```javascript // 假设我们接收到的是Bearer token const jsonData = pm.response.json(); if (jsonData.token){ pm.environment.set("authToken", jsonData.token); } // 若为Cookie-based session management let cookieValue = pm.cookies.get('session_id'); if(cookieValue !== null && cookieValue !== undefined){ pm.environment.set("sessionId", cookieValue); } ``` #### 发送带有认证信息的新请求 一旦获得了有效的授权凭证,就可以将其附加到接下来要发出的所有受限区域内的GET, POST等方法之上。例如,如果是OAuth2 Bearer Tokens的话就在headers里面加入如下所示的一行: ```bash Authorization: Bearer {{authToken}} ``` 而对于传统的PHPSESSID之类的cookies来说只需保证当前环境中已经存在对应的键名即可让Postman自动带上它参与通信流程[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值