gpt4 book ai didi

angularjs - Passport.js 中的身份验证,与 Angular JS 一起使用

转载 作者:行者123 更新时间:2023-12-02 23:22:01 26 4
gpt4 key购买 nike

我通过下面的链接了解了passport.js中authenticate方法的使用 http://passportjs.org/guide/authenticate/

在我的项目中,我有以下代码:

app.post('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err) { console.log(err); return next(err) }
if (!user) {
return res.json(400, info);
}
req.logIn(user, function(err) {
if (err) { return next(err); }
return res.json(200, {user_id: user._id, url:"/user/home"});
});
})(req, res, next);
});

我在另一个文件中调用了/login url,如下所示

 $http.post('/login', $scope.user).
success(function(data, status, headers, config) {
$window.location.href= data.url ? data.url : '/';
$scope.view.loading = false;
}).error(function(data, status, headers, config) {
console.log(data);
$scope.view.loading = false;
$scope.view.submitted = true;
$scope.view.serverError=data.message ? data.message : "Server Error!";
});

我的疑问是,passport.authenticate 如何知道用户凭据。在调用 http.post 的同时,我们还发送 $scope.user。但这只是“数据”。 Passport.authenticate 如何知道对象“user”?

最佳答案

不能 100% 确定您到底要问什么,但我会尝试一下。

您负责告诉 Passport 用户名/密码对是否匹配,然后向 Passport 提供与给定用户名(或电子邮件或其他内容)对应的用户对象。这是在: passport.use(new LocalStrategy( ... )); 中完成的,您可以在其中指定此逻辑。 (您可以在官方网站 here 上找到有关如何执行此操作的示例代码。)然后,Passport 再次按照您指定的逻辑在 session 中序列化此用户对象:

passport.serializeUser(function (user, done) {
// Only store the user id in the session
done(null, user.id);
});

passport.deserializeUser(function (id, done) {
// Find the user with the given id
User.find(id).done(function (err, user) {
done(err, user);
});
});

passport 在 passport.authenticate 的回调函数中传递给您的 user 对象与您提供给 Passport 的 user 对象完全相同这是本地策略的结果。

以下是事件的分割:

  1. 您将用户名/密码(或电子邮件/密码)对发布到/login。
  2. Express 接收请求并将其路由到适当的处理程序。
  3. 您可以通过提供 reqresnext 来执行 passport.authenticate(...) > 处理程序给你的对象。
  4. Passport 执行您在 passport.use(new LocalStrategy(...)) 中指定的登录逻辑。如果逻辑过程的结果是给定一个有效的user对象,那么passport会将该对象传递给回调函数,以便您可以返回用户的详细信息(或其他内容)。<

关于angularjs - Passport.js 中的身份验证,与 Angular JS 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21644443/

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