logout() 在使用 passport.js、express.js、AngularJs 时不起作用
Posted
技术标签:
【中文标题】logout() 在使用 passport.js、express.js、AngularJs 时不起作用【英文标题】:logout() not working using passport.js, express.js, AngularJs 【发布时间】:2016-02-26 06:09:03 【问题描述】:我猜我没有足够的睡眠,无法弄清楚。 跟随web登录在线示例,登录按钮有效,但注销按钮无效,server.js中未调用注销。
非常感谢!
app.config(['$routeProvider',
function($routeProvider)
$routeProvider.when('/login',
templateUrl: '/partials/login.html',
controller: 'authController'
);
$routeProvider.when('/logout',
templateUrl: '/partials/logout.html',
controller: 'authController',
);
...
);
app.controller('authController', function($scope, $http, $location, $window)
$scope.user = username:'', password:'';
$scope.alert = '';
$scope.login = function(user)
$http.post('/auth/login', user).
success(function(data)
console.log("you are at /auth/login 0");
$scope.loggedUser = data;
$window.location.href = "/index.html#/systemStatus";
).
error(function()
console.log("you are at /auth/login 1");
$scope.alert = 'Login failed'
);
;
$scope.logout = function()
$http.get('/auth/logout').
success(function()
console.log("you are at /auth/logout 0");
$scope.loggedUser = ;
).
error(function()
console.log("you are at /auth/logout 1");
$scope.alert = 'Logout failed'
);
;
);
login.html(这是默认页面,总是需要第一次登录)
<div ng-controller="authController">
<div style="margin-top:10px" class="form-group">
<div class="col-sm-12 controls">
<a id="btn-login" class="btn btn-success" ng-click="login(user)">Login </a>
</div>
</div>
</div>
main.html(这是登录成功后的第一页)
<html ng-app="myModule" ng-controller="MainCtrl">
...
<div class="container" ng-controller="authController">
<a class="btn btn-md btn-info custom-btn" ng-href="#/logout">Logout</a>
</div>
...
</html>
server.js
app.get('/auth/logout', function(req, res)
console.log("logging out ......");
req.session.distory();
req.logout();
//res.redirect('/login.html');
res.send(200);
);
【问题讨论】:
看我的回答***.com/a/43429283/2077479 【参考方案1】:你拼错了destroy:
req.session.destroy();
不是
req.session.distory();
【讨论】:
【参考方案2】:使用
req.logout();
req.session.destroy();
res.redirect("/login");
我在我的 nodejs 应用程序中使用它并且它工作正常。
【讨论】:
【参考方案3】:问题是发生角度路由而不是快速路由。要让 express 路由请求,您需要在注销链接的锚标记中添加 target="_self"。
<a class="btn btn-md btn-info custom-btn" ng-href="#/logout" target="_self">Logout</a>
【讨论】:
【参考方案4】:您需要通知浏览器刷新登录信息。这可以通过发送 401 错误代码来完成。
app.get('/auth/logout', function(req, res)
console.log("logging out ......");
req.logout();
res.send(401);
);
.
【讨论】:
以上是关于logout() 在使用 passport.js、express.js、AngularJs 时不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何在 passport-facebook / Passport.js 中捕获 FacebookAuthorizationError?