gpt4 book ai didi

angularjs - 如何将 Passport 与 Angular Node 应用程序一起使用?

转载 作者:IT老高 更新时间:2023-10-28 23:26:38 25 4
gpt4 key购买 nike

我正在开发一个基于 angular.js + node.jsmongodb 使用 express 模板的简单博客网站。我通过 POST 方法从 Angular Controller 使用 $http 到名为 users.js 的 api,其中使用 passport.authenticate 方法对登录进行身份验证。我需要 users.js 中的 Passport 本地登录策略。
但它不起作用。这里是 Angular 登录服务代码和 Node 用户 api 代码。谁能告诉我如何在 Angular 和 Node 中使用 passport.js

通过服务的 Angular 路由

app.service('Auth',function($location,$http,$localStorage){                  
var userLogin ;
return{
setLogIN:function(email,password){
$http({
method: 'POST',
url: '/users/login', //users.js having node routing.
data: {email:email, password:password},
})

用户中的 Node 路由

router.post('/login',passport.authenticate('local', { 
// use passport-local for authentication
successRedirect : '/profile',
failureRedirect : '/login',
failureFlash : true
}));

Passport 本地策略

app.use(passport.initialize());

app.use(passport.session());
passport.use(new LocalStrategy(
function (username, password, done) {

User.findOne({username: username}, function (err, user) {

if (err) {
return done(err);
}
if (!user) {
return done(null, false, {alert: 'Incorrect username.'});
}
if (user.password != password) {
return done(null, false, {alert: 'Incorrect password.'});
}
return done(null, user);
});
}

));


passport.serializeUser(function(user, done) {
done(null, user.id);
});

passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});

function isAuthenticated(req,res,next){
if(req.isAuthenticated())return next();
res.redirect('/');
}

所以我想使用 Passport 进行身份验证,但使用客户端模板/路由来保持正确的身份验证。

有人可以指出我正确的方向吗?或者告诉我我所做的是否完全被误导了?

编辑:我的代码出现的错误是它没有重定向到个人资料页面

TypeError: POST http://localhost:3000/users/login 500 Internal Server Error

Not a valid User

最佳答案

我找到了我的问题的解决方案..如何在angular-nodejs路由中使用 Passport ......

 //angular js routing
$scope.userlogin=function(){
$http({
method:"post",
url:'/users/login',
data:{username:$scope.username,password:$scope.password},
}).success(function(response){
$scope.userData = response;
$localStorage.userData = $scope.userData;
console.log("success!!");
$location.path("/profile")
}).error(function(response){
console.log("error!!");
$location.path("/login")
});
}

我使用 POST 方法并点击 Node (users.js) Controller 并从中获取响应。如果用户身份验证成功,则将其重新定位到配置文件 View ,否则将保留在登录 View 中。

//add these two lines to app.js
// var app = express();
app.use(passport.initialize());

app.use(passport.session());

//node routing
// add passport-stretegies to users.js
passport.use(new LocalStrategy(function(username, password, done) {
user.findOne({username: username }, function(err, user) {
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (user.password != password) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
// console.log(user)
});
}));

//passport serialize user for their session
passport.serializeUser(function(user, done) {
done(null, user.id);
});
//passport deserialize user
passport.deserializeUser(function(id, done) {
user.findById(id, function(err, user) {
done(err, user);
});
});

//router on same page
router.post('/login',passport.authenticate('local'),function(req,res){

res.send(req.user);
//console.log(req.user);
});

通过 post 方法从 angular side 获得一个命中,如果用户通过身份验证,则使用本地 Passport 方法进行身份验证,然后将经过身份验证的用户作为响应发送..

关于angularjs - 如何将 Passport 与 Angular Node 应用程序一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36785372/

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