2016-12-01 68 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. 
}