2016-12-01 69 views
1

我正在使用strongloop创建一个使用访问令牌的API。检查用户是否已登录(Strongloop和NodeJS)

我遵循此guide(也包括strongloop文档)来创建一个存储访问令牌的cookie,并使应用程序能够使用cookie来存储访问令牌。

这里是我的设置cookie一旦用户在(普通/模型/ API-user.js的)记录代码:

'use strict'; 

module.exports = function(Apiuser) { 

    // on login set access_token cookie with same ttl as loopback's accessToken 
    Apiuser.afterRemote('login', function setLoginCookie(context, accessToken, next) { 
     var res = context.res; 
     var req = context.req; 
     if (accessToken != null) { 
      if (accessToken.id != null) { 
       res.cookie('access_token', accessToken.id, { 
        signed: req.signedCookies ? true : false, 
        maxAge: accessToken.ttl 
       }); 
       return res.redirect('/'); 
      } 
     } 
     return next(); 
    }); 

}; 

,然后在我的服务器/ server.js,我使用cookie的解析器这样创造签署饼干:

var cookieParser = require('cookie-parser'); 
var secret = "somesecret"; 

//use cookie-parser for signed cookies. 
app.use(cookieParser(secret)); 

// use loopback.token middleware on all routes 
app.use(loopback.token({ 
    model: app.models.accessToken, 
    currentUserLiteral: 'me', 
    searchDefaultTokenKeys: false, 
    cookies: ['access_token'], 
    headers: ['access_token', 'X-Access-Token'], 
    params: ['access_token'] 
})); 

我登录,设置cookie名称为“的access_token”之后,但是,它似乎并不认为环回使用此cookie /接取令牌验证请求对api做出的。

此外,我有一些客户端的HTML,我想通过阅读cookie值来检查用户是否登录,但是,访问令牌通过使用cookie解析器得到加密,我不知道如何实际阅读存储在该cookie客户端的访问令牌。我有点js noob节点,所以我会很感激,如果有人能指出我正确的方向。

回答

0

有一个在CTX(使用的accessToken),不知道一个功能,如果你已经尝试过作为 您已经阅读文档:

app.use(loopback.context()); 
app.use(loopback.token()); 
app.use(function (req, res, next) { 
    if (!req.accessToken) return next(); 
    app.models.User.findById(req.accessToken.userId, function(err, user) { 
    if (err) return next(err); 
    if (!user) return next(new Error('No user with this access token was found.')); 
    res.locals.currentUser = user; 
    var loopbackContext = loopback.getCurrentContext(); 
    if (loopbackContext) loopbackContext.set('currentUser', user); 
    next(); 
    }); 
}); 

// anywhere in the app 
var ctx = loopback.getCurrentContext(); 
var currentUser = ctx && ctx.get('currentUser'); 

Current user anywhere or remote methods

0
var ctx = loopBackContext.getCurrentContext(); 
var accessToken = ctx && ctx.get('accessToken') || null; 

if(accessToken && accessToken.userId){ 
// it will give you login user's id. 
}