簡體   English   中英

使用Node和AngularJS的會話和登錄用戶數據

[英]Session and Login User data with Node and AngularJS

我需要知道身份驗證和會話管理方法是否正確。

我正在使用會話管理,就像收到成功的身份驗證一樣。 從節點服務器。 我將用戶數據(沒有任何通過痕跡)存儲在$ window.sessionStorage中,如果用戶標記了RememberMe(checkbox),也將數據存儲在$ window.localStorage中。

通過這種方式,我可以在不同的控制器中獲取數據。 雖然我在服務器(nodeJs)端閱讀了有關會話實現的內容,但也是可能的。 但是我不確定如何將會話與JSONToken身份驗證一起使用。

我使用https://jasonwatmore.com/post/2015/12/09/MEAN-Stack-User-Registration-and-Login-Example.aspx作為學習示例,但我聽不懂。

/app/app.js

為什么在run()方法中呢?

    // add JWT token as default auth header
    $http.defaults.headers.common['Authorization'] = 'Bearer ' + $window.jwtToken;

這是什么:

// manually bootstrap angular after the JWT token is retrieved from the server
$(function () {
    // get JWT token from server
    $.get('/app/token', function (token) {
        window.jwtToken = token;

        angular.bootstrap(document, ['app']);
    });
});

/controllers/app.controller.js

// use session auth to secure the angular app files
router.use('/', function (req, res, next) {
    if (req.path !== '/login' && !req.session.token) {
        return res.redirect('/login?returnUrl=' + encodeURIComponent('/app' + req.path));
    }

    next();
});

// make JWT token available to angular app
router.get('/token', function (req, res) {
    res.send(req.session.token);
});

// serve angular app files from the '/app' route
router.use('/', express.static('app'));

因此,將會話服務器端與JWT一起使用會破壞使用JWT的目的。 JWT在許多方面都很棒,但是它們很棒的一種方式是,不管哪個服務器截獲請求,他們都可以驗證用戶。

如果將其放在會話中,則必須確保客戶端將繼續訪問同一台服務器,因為會話已保存在該計算機的內存中。 有很多解決方法,但這又違反了JSON Web令牌的目的。

我每次使用angular / node / JWT進行身份驗證時所做的工作都是每次都將JWT傳遞回標頭,並且中間件使用以下命令攔截了它:

req.header.whatever_my_tokens_name_is

下面的代碼將$ http設置為在每次請求時將JWT令牌發送到服務器。

// add JWT token as default auth header
$http.defaults.headers.common['Authorization'] = 'Bearer ' + $window.jwtToken;

下面的代碼從“ / app / token”獲取令牌並將其存儲在LocalStorage中。 之后,它開始成角度。

// manually bootstrap angular after the JWT token is retrieved from the server
$(function () {
    // get JWT token from server
    $.get('/app/token', function (token) {
        window.jwtToken = token;

        angular.bootstrap(document, ['app']);
    });
});

這是一個中間件,用於檢查req.session.token中是否沒有存儲的令牌,並且所請求的URL不是'/ login'。 如果是這樣,請將重定向發送到“ / login”。

// use session auth to secure the angular app files
router.use('/', function (req, res, next) {
    if (req.path !== '/login' && !req.session.token) {
        return res.redirect('/login?returnUrl=' + encodeURIComponent('/app' + req.path));
    }

    next();
});

最后在這里,這是客戶端再次從服務器請求“ /令牌”的端點。

// make JWT token available to angular app
router.get('/token', function (req, res) {
    res.send(req.session.token);
});

無論如何,請檢查@ morgan-g響應regarless會話端和JWT。

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM