问题描述
我想保持所有页面的会话。对于这个项目,我使用的是expresJs,nodeJS作为服务器端。 AngularJS在前端。
我不确定,当视图更改或网址更改时,如何处理会话。因为我需要照顾 expresJS路由器或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:'/'});
}]);
注册控制器
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);
})
错误(function(data,status,headers,config){
console.log(data)
});
}
})
ExpressJS路由器
module.exports = exports = function(app,db){
var sessionHandler =新的SessionHandler(db);
var contentHandler = new ContentHandler(db);
//中间件查看用户是否登录
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);
//处理中间件错误
app.use(ErrorHandler);
}
注册后,我想重定向到登录页面。如何在上述路由器上执行此操作。我应该使用以下哪一个来更改app
的视图1)$ location of angularJS
2)ExpresJS的重定向
感谢所有
所以我有同样的问题,为了公平起见,我可能已经读过了我不记得的地方了。 / p>
问题:Angular构建单页应用程序。刷新后,您的范围变宽,并通过认证的用户。
方法
提供了一个名为 run 的启动函数,它被称为always页面加载时。完美的刷新/重新加载。
myApp.run(function($ rootScope,$ location,myFactory){
$ http.get('/ confirm-login')
.success(function(user){
if(user&& user.userId){
$ rootScope.user = user;
}
});
}
express -session 为您保存会话,并使用您的浏览器发送的sessionId对您进行身份验证,所以它总是知道您是否经过身份验证。
router.get('/ confirm-login',function(req,res){
res.send(req.user)
}
); $ b $所有我需要做的是,在刷新和所有依赖关系加载后,询问我是否通过身份验证并设置$ rootScope .user = authenticatedUserFromExpress;
I would like to keep session across all the page. For this project, I am using expresJs, nodeJS as server side. AngularJS in front end.
I am not sure, how to handle session when view changes or url changes. Because I need to take care of both expresJS router or angularJs router.
Please let me know, what approach should I follow.
angularJS router
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: '/'});
}]);
Signup 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 router
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);
}
After signup, I would like to redirect to the login page. How can I do that in the above router. which one of the following should I use to change the view of app 1) $location of angularJS 2) redirect of ExpresJS
Thanks All
解决方案 So i had the same problem and to be fair i might have read the approach somewhere i don't remember anymore.
Problem: Angular builds single page apps. After refresh, you loose scope and with it the authenticated user.
Approach
AngularJS modules offer a startup function called run which is called always when the page is loaded. Perfect for refresh/reload.
myApp.run(function ($rootScope, $location, myFactory) {
$http.get('/confirm-login')
.success(function (user) {
if (user && user.userId) {
$rootScope.user = user;
}
});
}
express-session saves the sessions for you and authenticates you with the sessionId your browser sends. So it always knows if you are authenticated or not.
router.get('/confirm-login', function (req, res) {
res.send(req.user)
}
);
All i had to do is, after refreshing and all dependencies were loaded, ask if i am authenticated and set $rootScope.user = authenticatedUserFromExpress;
这篇关于AngularJS和ExpressJS会话管理?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!