gpt4 book ai didi

node.js - AngularJS 和 ExpressJS session 管理?

转载 作者:搜寻专家 更新时间:2023-10-31 22:22:00 25 4
gpt4 key购买 nike

我想在整个页面上保持 session 。对于这个项目,我使用 expressJs,nodeJS 作为服务器端。前端的 AngularJS。

我不确定,当 View 更改或 url 更改时如何处理 session 。因为我需要兼顾 expressJS 路由器或 angularJs 路由器

我应该遵循什么方法?

angularJS 路由器

     myApp.config(['$routeProvider', function($routeProvider) {

$routeProvider.when('/welcome', {templateUrl: 'partials/welcome.html', controller: 'MyCtrl2'});
$routeProvider.when('/login', {templateUrl: 'partials/login.html', controller: 'MyCtrl2'});
$routeProvider.when('/signup', {templateUrl: 'partials/signup.html', controller: 'singupController'});
$routeProvider.otherwise({redirectTo: '/'});
}]);

注册 Controller

myApp.controller('singupController',function($scope,$rootScope,$http){

$scope.doSingnup = function() {

var formData = {
'username' : this.username,
'password' : this.password,
'email' : null
};

var jdata = JSON.stringify(formData);

$http({method:'POST',url:'/signup',data:jdata})
.success(function(data,status,headers,config){

console.log(data);

}).
error(function(data,status,headers,config){

console.log(data)

});
}
})

ExpressJS 路由器

    module.exports = exports = function(app, db) {

var sessionHandler = new SessionHandler(db);
var contentHandler = new ContentHandler(db);

// Middleware to see if a user is logged in
app.use(sessionHandler.isLoggedInMiddleware);

app.get('/', contentHandler.displayMainPage);

app.post('/login', sessionHandler.handleLoginRequest);

app.get('/logout', sessionHandler.displayLogoutPage);

app.get("/welcome", sessionHandler.displayWelcomePage);

app.post('/signup', sessionHandler.handleSignup);

app.get('*', contentHandler.displayMainPage);

// Error handling middleware
app.use(ErrorHandler);
}

注册后,我想重定向到登录页面。我怎样才能在上面的路由器中做到这一点。我应该使用以下哪一项来更改应用程序的 View
1)angularJS的$location
2) ExpressJS 的重定向

最佳答案

所以我遇到了同样的问题,公平地说,我可能已经不记得在某个地方读过该方法了。

问题:Angular 构建单页应用程序。刷新后,您将失去作用域以及经过身份验证的用户。

方法

AngularJS modules提供一个名为 run 的启动函数,它总是在页面加载时调用。非常适合刷新/重新加载。

myApp.run(function ($rootScope, $location, myFactory) {
$http.get('/confirm-login')
.success(function (user) {
if (user && user.userId) {
$rootScope.user = user;
}
});
}

express-session 为您保存 session 并使用您的浏览器发送的 sessionId 对您进行身份验证。因此它始终知道您是否通过了身份验证。

router.get('/confirm-login', function (req, res) {
res.send(req.user)
}
);

我所要做的就是,在刷新并加载所有依赖项之后,询问我是否已通过身份验证并设置 $rootScope.user = authenticatedUserFromExpress;

关于node.js - AngularJS 和 ExpressJS session 管理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18493774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com