网络和移动,存储令牌/ cookie的位置

时间:2019-02-01 08:03:12

标签: node.js cookies jwt

我正在开发一个程序,该程序由后端服务器,移动应用程序和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内)。我不想使用单独的登录代码。

1 个答案:

答案 0 :(得分:0)

您可以使用document.cookie = ...MDN document cookie)在前端轻松添加新的Cookie

在您的中间件中,您只需要解析cookie即可,而不是某些Bearer令牌或其他任何东西。

相关问题