第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

使用快遞和MongoDB - 如何注銷用戶?

使用快遞和MongoDB - 如何注銷用戶?

我正在學(xué)習(xí)使用Expell和Mongo的NodeJS中的身份驗(yàn)證教程 - 代碼實(shí)驗(yàn)室#1我得到了一切完美工作,但本教程沒有解決如何注銷用戶。據(jù)我所知,該會話保存在貓鼬地圖集上,這是我正在使用的數(shù)據(jù)庫。當(dāng)我使用Postman登錄用戶時(shí),我會獲得一個(gè)令牌。但我不確定如何配置 /logout 路由。這是我的代碼:///middleware/auth.jsconst jwt = require("jsonwebtoken");module.exports = function (req, res, next) {  const token = req.header("token");  if (!token) return res.status(401).json({ message: "Auth Error" });  try {    const decoded = jwt.verify(token, "randomString");    req.user = decoded.user;    next();  } catch (e) {    console.error(e);    res.status(500).send({ message: "Invalid Token" });  }};///models/User.jsconst mongoose = require("mongoose");const UserSchema = mongoose.Schema({  username: {    type: String,    required: true  },  email: {    type: String,    required: true  },  password: {    type: String,    required: true  },  createdAt: {    type: Date,    default: Date.now()  }});// export model user with UserSchemamodule.exports = mongoose.model("user", UserSchema);所以我的問題是,如何實(shí)現(xiàn)/logout路由,以便當(dāng)用戶單擊注銷按鈕并調(diào)用該路由時(shí),他們的令牌將被銷毀。我只是在問后端部分。我可以使用公理來處理。
查看完整描述

2 回答

?
湖上湖

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊

據(jù)我所知,您沒有保存任何會話數(shù)據(jù)或在任何地方存儲令牌 - 這很棒。您只需在對 API 的請求中將令牌追加到標(biāo)頭即可。

因此,您唯一能做的就是可能使 中的令牌過期,然后確保刪除客戶端上的令牌 - 可能是本地存儲,會話存儲等 - 您的客戶端代碼需要終止令牌,因此無法再次包含它。/logout route

附注:

  1. 您不會在任何地方延長令牌生存期,因此即使用戶繼續(xù)在網(wǎng)站上進(jìn)行交互,令牌過期也不會更新。您需要手動刷新令牌/生成新令牌才能使令牌出現(xiàn)滑動過期。

  2. 我建議您將令牌保存在餅干中。將 Cookie 設(shè)置為“唯一”、“安全”,然后指定域。這要安全得多,并且還允許您從API中使cookie過期。如果您包含的任何腳本遭到入侵,它們可以輕松訪問所有用戶的令牌。

例:

import {serialize} from 'cookie';

import jsend from 'jsend';


...

const token = jwt.sign(

    {

        id: validationResult.value.id // whatever you want to add to the token, here it is the id of a user

    },

    privateKeyBuffer,

    {

        expiresIn: process.env.token_ttl,

        algorithm: 'RS256'

    });


const cookieOptions = {

    httpOnly: true,

    path: '/',

    maxAge: process.env.token_ttl,

    expires: new Date(Date.now() + process.env.token_ttl),

    sameSite: process.env.cookie_samesite, // strict

    domain: process.env.cookie_domain, // your domain

    secure: process.env.cookie_secure // true

};


const tokenCookie = await serialize('token', token, cookieOptions);


res.setHeader('Set-Cookie', [tokenCookie]);


res.setHeader('Content-Type', 'application/json');

res.status(200).json(jsend.success(true));

然后在注銷中:


    // grab from req.cookies.token and validate

    const token = await extractToken(req);


    // you can take action if it's invalid, but not really important

    if(!token) {

       ...

    }


    // this is how we expire it - the options here must match the options you created with!

    const cookieOptions = {

        httpOnly: true,

        path: '/',

        maxAge: 0,

        expires: 0,

        sameSite: process.env.cookie_samesite, // strict

        domain: process.env.cookie_domain, // your domain

        secure: process.env.cookie_secure // true

    };


    // set to empty 

    const tokenCookie = await serialize('token', '', cookieOptions);


    res.setHeader('Set-Cookie', [tokenCookie]);

    res.setHeader('Content-Type', 'application/json');

    res.status(200).json(jsend.success(true));


查看完整回答
反對 回復(fù) 2022-09-23
?
慕桂英3389331

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊

由于您已經(jīng)使用了JWT,后端將始終檢查2件事1。正確的令牌 2.如果該特定時(shí)間已結(jié)束(您應(yīng)該處理此時(shí)間)

對于第二點(diǎn),如果用戶時(shí)間超過前端,則可以刪除令牌(如果已將令牌存儲在localtorage中)。

對于注銷,當(dāng)用戶單擊注銷時(shí),只需從本地存儲中刪除jwt并重定向到登錄或其他頁面


查看完整回答
反對 回復(fù) 2022-09-23
  • 2 回答
  • 0 關(guān)注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號