我正在开发一个程序,该程序由后端服务器,移动应用程序和Web应用程序组成。我已将JWT令牌添加到移动应用程序中,并且存储在异步存储中。但是,我找不到在Web服务器中执行操作的合适方法。
我已经创建了一个中间件文件,用于创建和检查令牌的有效性。在我的API路线中,我正在执行以下操作
router.post('/:url', middleware.checkToken, (req, res, next)=>
{
...
}
因此,每次我调用此API时,中间件文件都会检查令牌。在我的移动应用程序中,我将令牌存储在异步存储中,并将其传递到Web服务器。
但是,在浏览器端,我想将令牌存储在cookie中,而不是存储在本地存储中。如何在不更改代码的情况下做到这一点?
这是移动登录API。
router.post('/login', (req,res,next) => {
let username = req.body.username;
let password = req.body.password;
User.findOne({'username' : username})
.exec()
.then(doc =>{
if(doc.validPassword(password))
{
let token = jwt.sign({
id: doc.id,
email: doc.email,
},
config.secret,
{ expiresIn: '24h' // expires in 24 hours
}
);
res.status(200).json({
success: true,
message: 'Authentication successful!',
token: token
});
}
else{
// invalid credentials
res.send(403).json({
success: false,
message: 'Incorrect username or password'
});
}
})
})
我不需要单独的文件用于Web登录。我只想使用相同的代码,而不复制到另一个文件。
我应该为手机和网络编写另一种不同的代码,但是一个发送cookie,另一个发送普通令牌吗?有什么方法可以通过简单的解决方案来实现这一目标?
简而言之:
移动用户将凭证发送到移动登录页面,然后他们会收到令牌。 Web用户将凭据发送到网页,他们会收到一个cookie(令牌驻留在cookie内)。我不想使用单独的登录代码。
答案 0 :(得分:0)
您可以使用document.cookie = ...
(MDN document cookie)在前端轻松添加新的Cookie
在您的中间件中,您只需要解析cookie即可,而不是某些Bearer
令牌或其他任何东西。