大佬教程收集整理的这篇文章主要介绍了angularjs – 身份验证返回“401(未授权)”时不应该返回,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在前端,SailsJS后端框架和PassportJS身份验证中间件上使用AngularJs.
我的源代码(现在)公开存储…后端API在Github上(API Github),前端代码在这里找到(Front-End Github)
基本上发生的是用户
login: function (credentials) { return baseAuth.customPOST(credentials,'login').then(function (user) { $log.debug('User logged in: ',user); isAuthenticated = true; return user; }); },
>该customPOST的控制器逻辑就是这个
login: function (req,res,next) { passport.authenticate('local',function (err,user,info) { if (err) { return res.json(err); } else if (user) { req.logIn(user,function (err) { if (err) { return res.json(err); } return res.json(user); }); } else { return res.json(400,info); } })(req,res); },
passport.use(new LocalStrategy({ usernameField: 'email',@R_673_5747@dField: '@R_673_5747@d' },function(email,@R_673_5747@d,next) { User.findOne({ email: email }) .exec(function (err,user) { if (err) { return next(err); } if (user) { if (user.activated) { bcrypt.compare(@R_673_5747@d,user.@R_673_5747@d,valid) { if (err) { next(err); } if (valid) { return next(null,{ message: 'Logged In' }); } else { return next(null,false,{ message: 'Incorrect @R_673_5747@d'}); } }); } else { next(null,{ message: 'User is not activated. please contact admins.'}); } } else { next(null,{ message: 'Could not find user with email ' + email }); } }); } ));
在控制台中,我总是认为这是成功的.
控制台读取:
User logged in: Object {firstName: "John",lastName: "Doe",email: "john_doe@work.com",activated: true,isUser: true…}
>然后,我对发生的事情的理解变得有些模糊.我知道应用程序然后尝试查看用户是否经过身份验证. IsAuthenticated被触发,在AngularJS中看起来像这样:
isAuthenticated: function (forcE) { var deferred = $q.defer(); if (isAuthenticated && currentUser) { deferred.resolve(currentUser); } else { return baseAuth.customGET('authenticated').then(function (user) { deferred.resolve(currentUser); isAuthenticated = true; currentUser = user; return user; }); } return deferred.promise; }
>它在后端UserController中执行此操作
isAuthenticated: function (req,res) { if (req.isAuthenticated() && req.user.isUser) { return res.json(req.user); } else { return res.send(401); } },
然后它失败了:( GET http:// localhost:1337 / user / authenticated 401(Unauthorized)req.isAuthenticated和req.user.isUser都没有通过.我把它们分开来单独测试,但它们都不是真的.“isUser “是一个我默认为true的值,因此对于db中的每个用户都应该是真的.req.isAuthenticated也失败了,我不完全理解.
有人对我的问题有所了解吗?我在这里做错了什么?
使用withCredentials选项强制它.
$http({ withCredentials: true,... })
似乎Restangular使用相同的选项:
https://github.com/mgonto/restangular#setdefaulthttpfields
https://docs.angularjs.org/api/ng/service/$http#usage
编辑:您还应该按照idbehold的指示检查the server side configuration
正如Matan所建议的那样,你应该尝试在服务器端使用sails-generate-auth生成器.
以上是大佬教程为你收集整理的angularjs – 身份验证返回“401(未授权)”时不应该返回全部内容,希望文章能够帮你解决angularjs – 身份验证返回“401(未授权)”时不应该返回所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。