如何在身份验证后将用户重定向到原始请求,Angular-Fullstack Yeoman?
How to redirect users to original request after authentication, Angular-Fullstack Yeoman?
我正在使用 Angular-Fullstack yeoman 生成器作为我项目的基础:
https://github.com/DaftMonk/generator-angular-fullstack
我不知道如何将用户重定向到他们最初在登录后请求的 link。
我想要发生的事情的例子:
- 未经身份验证的用户请求http://myapp/videos/video1
- 用户被引导登录
- 用户认证成功
- 用户自动重定向到 http://myapp/videos/video1
我同时使用样板本地登录和样板 OAuth。
感谢您的帮助!
我在类似情况下所做的是,当我将用户重定向到登录页面时,我附加到 url(作为查询参数)用户试图访问的初始路径,例如。 path_to_login?requested_url=/videos/video1
。因此,当登录成功完成时,我只读取 requested_url
查询参数,如果存在,用户将被重定向到指定路径。
我明白了,这是我解决这个问题的步骤。 出于某种原因,Stack Overflow 没有格式化我下面的最后 2 个代码块。 我用下面的代码做了一个要点(注意需要修改 3 个单独的文件)
https://gist.github.com/dcoffey3296/d27c141ef79bec3ff6a6
将 url 存储到 return 到 client/app/app.js
的 .run()
方法中的 cookie 中
.run(function ($rootScope, $location, Auth, $cookieStore) {
// Redirect to login if route requires auth and you're not logged in
$rootScope.$on('$stateChangeStart', function (event, next) {
Auth.isLoggedInAsync(function(loggedIn) {
if (next.authenticate && !loggedIn) {
// store the requested url if not logged in
if ($location.url() != '/login')
{
$cookieStore.put('returnUrl', $location.url());
}
$location.path('/login');
}
});
});
});
对于 Oauth,检查此 cookie 并在 server/auth/auth.service.js
中存在时重定向
function setTokenCookie(req, res) {
if (!req.user) {
return res.json(404, { message: 'Something went wrong, please try again.'});
}
var token = signToken(req.user._id, req.user.role);
res.cookie('token', JSON.stringify(token));
// return the user to the request page (oAuth) or homepage
if (typeof req.cookies.returnUrl != 'undefined')
{
res.redirect(req.cookies.returnUrl.replace(/"/g, "") || '/');
}
else
{
res.redirect('/');
}
}
对于本地登录,检查 $scope.login()
的 .then()
部分中的 cookie,文件:client/app/account/login/login.controller.js
.then( function() {
// Logged in, redirect to home
if (typeof $cookieStore.get('returnUrl') != 'undefined' && $cookieStore.get('returnUrl') != '')
{
$location.path($cookieStore.get('returnUrl'));
$cookieStore.remove('returnUrl');
}
else
{
$location.path('/');
}
})
我正在使用 Angular-Fullstack yeoman 生成器作为我项目的基础: https://github.com/DaftMonk/generator-angular-fullstack
我不知道如何将用户重定向到他们最初在登录后请求的 link。
我想要发生的事情的例子:
- 未经身份验证的用户请求http://myapp/videos/video1
- 用户被引导登录
- 用户认证成功
- 用户自动重定向到 http://myapp/videos/video1
我同时使用样板本地登录和样板 OAuth。
感谢您的帮助!
我在类似情况下所做的是,当我将用户重定向到登录页面时,我附加到 url(作为查询参数)用户试图访问的初始路径,例如。 path_to_login?requested_url=/videos/video1
。因此,当登录成功完成时,我只读取 requested_url
查询参数,如果存在,用户将被重定向到指定路径。
我明白了,这是我解决这个问题的步骤。 出于某种原因,Stack Overflow 没有格式化我下面的最后 2 个代码块。 我用下面的代码做了一个要点(注意需要修改 3 个单独的文件)
https://gist.github.com/dcoffey3296/d27c141ef79bec3ff6a6
将 url 存储到 return 到
的client/app/app.js
.run()
方法中的 cookie 中.run(function ($rootScope, $location, Auth, $cookieStore) { // Redirect to login if route requires auth and you're not logged in $rootScope.$on('$stateChangeStart', function (event, next) { Auth.isLoggedInAsync(function(loggedIn) { if (next.authenticate && !loggedIn) { // store the requested url if not logged in if ($location.url() != '/login') { $cookieStore.put('returnUrl', $location.url()); } $location.path('/login'); } }); }); });
对于 Oauth,检查此 cookie 并在
中存在时重定向server/auth/auth.service.js
function setTokenCookie(req, res) { if (!req.user) { return res.json(404, { message: 'Something went wrong, please try again.'}); } var token = signToken(req.user._id, req.user.role); res.cookie('token', JSON.stringify(token)); // return the user to the request page (oAuth) or homepage if (typeof req.cookies.returnUrl != 'undefined') { res.redirect(req.cookies.returnUrl.replace(/"/g, "") || '/'); } else { res.redirect('/'); } }
对于本地登录,检查
$scope.login()
的.then()
部分中的 cookie,文件:client/app/account/login/login.controller.js
.then( function() { // Logged in, redirect to home if (typeof $cookieStore.get('returnUrl') != 'undefined' && $cookieStore.get('returnUrl') != '') { $location.path($cookieStore.get('returnUrl')); $cookieStore.remove('returnUrl'); } else { $location.path('/'); } })