在Loopback中设置访问令牌cookie?

时间:2016-03-13 10:57:21

标签: node.js express loopbackjs

我想使用Cookie来保持用户登录。

在此页here上,他们说

  

要使用Cookie进行身份验证,请将以下内容添加到server.js   (开机前):

app.use(loopback.token({ model: app.models.accessToken }));

看起来很简单。我认为在登录过程中,Loopback会自动设置cookie,但它仍然无法正常工作,我在Chrome开发工具中检查我的cookie并且没有设置。

我错过了什么吗?否则,什么是挂钩登录方法以设置cookie /标题的最佳方式?

我在loopback.token()方法here上找到了文档,它确切地说明了它检查令牌的位置。

2 个答案:

答案 0 :(得分:2)

我得到了它的工作。这个cookie没有签名。

我对Express和这类低级别的东西都很陌生。我记得读过这个饼干必须签名但是我不知道我必须通过“签名:真实”。

My issue on Github如果这有助于其他任何人。

答案 1 :(得分:0)

以下是详细步骤:

  1. npm install --save cookie-parser
  2. npm install --save express-session
  3. 修改 server.js ,以便添加 cookieParser 并定义Cookie密码

    var cookieParser = require(' cookie-parser');

    app.use(cookieParser('随机引用'));

  4. 此代码应出现在

    之前
    app.set('views', './server/views');
    app.set('view engine', 'ejs');
    

    当您登录用户创建签名cookie时,重要的是它是签名cookie,因为Loopback不会读取未签名的cookie。例如:

    router.post('/login', function(req, res) {
            User.login({
                email: req.body.email,
                password: req.body.password
            }, 'user', function(err, token) {
                if (err) {
                    if (err.details && err.code === 'LOGIN_FAILED_EMAIL_NOT_VERIFIED') {
                        res.render('reponseToTriggerEmail', {
                            title: 'Login failed',
                            content: err,
                            redirectToEmail: '/api/users/' + err.details.userId + '/verify',
                            redirectTo: '/',
                            redirectToLinkText: 'Click here',
                            userId: err.details.userId
                        });
                    } else {
                        res.render('response', {
                            title: 'Login failed. Wrong username or password',
                            content: err,
                            redirectTo: '/',
                            redirectToLinkText: 'Please login again',
                        });
                    }
                    return;
                }
    
            res.cookie('access_token', token.id, { signed: true , maxAge: 300000 });
    
            res.render('engine', {
                email: req.body.email,
                accessToken: token.id,
                redirectUrl: '/api/users/change-password?access_token=' + token.id
            });
        });
    });
    

    就是这样。

相关问题