我正在使用Angular-Fullstack yeoman生成器作为我项目的基础: https://github.com/DaftMonk/generator-angular-fullstack
我无法弄清楚如何在登录后将用户重定向到他们最初请求的链接。
我想要发生的事例:
我正在使用样板本地登录和样板OAuth。
感谢您的帮助!
答案 0 :(得分:3)
我明白了,这是我为解决这个问题所采取的步骤。 由于某种原因,Stack Overflow没有格式化我下面的最后两个代码块。我对下面的代码做了一个要点(注意3个单独的文件需要修改)
https://gist.github.com/dcoffey3296/d27c141ef79bec3ff6a6
将网址存储在.run()
client/app/app.js
<{1}}方法中的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('/');
}
}
进行本地登录,在.then()
的{{1}}部分检查Cookie,文件:$scope.login()
client/app/account/login/login.controller.js
答案 1 :(得分:0)
我在类似情况下所做的是,当我将用户重定向到登录页面时,我将url(作为查询参数)附加到用户尝试访问的初始路径,例如。 path_to_login?requested_url=/videos/video1
。因此,当登录成功完成后,我只需阅读requested_url
查询参数,如果存在,则将用户重定向到指定路径。