angularjs satellizer 重定向回上一页
angularjs satellizer redirect back to previous page
我在 angular 代码中使用 satellizer 来处理本地 api 的身份验证。我没有将任何第三方 API 身份验证与我的站点集成,一切都是本地的。我让网站正常工作,如果用户使用无效令牌,系统会将用户重定向到登录页面。如果我需要在用户登录后带回请求的 link 怎么办?
例如。如果用户请求访问'/customer/detail/123',但用户被重定向到登录页面(/account/login),登录成功后,如何将用户重定向回'/customer/detail/123 '
Satellizer 无法帮助您解决这个问题。我也 运行 参与其中并创建了一个服务来处理这个问题。因此,如果用户被重定向到 /login,我会将路径保存在服务中。登录后,通过从服务中获取它来重定向到保存的路径。
当使用 ui-router 时,通过监听 '$stateChangeStart' 检测每一个变化。当状态改变并且需要登录时,通过从以下位置获取当前路径来保存当前路径:'$location.path()'
登录后,设置路径为$location.path();
希望这对您有所帮助。
刘
我在我的项目中做着完全相同的事情。检查这个。
$rootScope.$on('$stateChangeStart', function(event, next, current) {
if(next.name != 'user_login' && next.name != 'user_register')
{
// I am using localStorage module but you can do the same
// using your way of storing values to localstorage
localStorageService.set('redirect_back_path', next.name);
localStorageService.set('redirect_back_path_params', current);
}
});
这里我存储了两个值,redirect_back_path
用于存储每个请求的当前请求的状态名称,redirect_back_path_params
用于存储当前请求具有的参数,"like 123 in your example"。
我不知道为什么 angular 将即将到来的请求的参数保存到 current
对象。也许其他人可以在这里回答。
好的,现在你需要做的是,登录后,检查redirect_back_path
中是否有任何值,如果有,
$state.go(localStorageService.get('redirect_back_path'), localStorageService.get('redirect_back_path_params');
否则只需转到任何其他默认页面。
希望对您有所帮助。
我运行和satellizer
进入同一个问题
自 ui-router 1.0.0-alpha1 起,不再支持 $stateChangeStart 和此类事件:https://github.com/angular-ui/ui-router/issues/2655
我正在使用以下工具并且运行良好:
satellizer 0.15.5,ui-router 1.0.0-beta.3,angular 1.6.1
app.run(['$transitions', '$state', '$auth', 'CommonService', function ($transitions, $state, $auth, CommonService) {
$transitions.onStart({}, function (transition) {
var state = transition.to();
if (state.resolve && state.resolve.loginRequired && !$auth.isAuthenticated())
{
CommonService.RedirectState = state.name;
return $state.target('login');
}
else if (CommonService.RedirectState && $auth.isAuthenticated())
{
var target = $state.target(CommonService.RedirectState);
CommonService.RedirectState = null;
return target;
}
});
}]).service('CommonService', [
function ()
{
this.RedirectState = null;
}]);
当用户请求受限(解析:loginRequired)状态且未通过身份验证时,我们会将状态存储在服务中并将他重定向到 'login' 状态。
稍后当用户通过身份验证时,我们发现服务中有一个 'RedirectState'(即使 satellizer 默认重定向到 '/'),我们只是将用户重定向到 'CommonService.RedirectState'并删除服务中的引用。不需要本地存储/其他模块。没有对 satelizer 默认配置进行任何更改。我只是在路由配置之后添加了这个。
在DavidT的基础上,改成原参数重定向:
app.run(['$transitions', '$state', '$auth', 'CommonService', function ($transitions, $state, $auth, CommonService) {
$transitions.onStart({}, function (transition) {
var state = transition.to();
var para = transition.targetState();
if (state.resolve && state.resolve.loginRequired && !$auth.isAuthenticated())
{
CommonService.RedirectState = state.name;
CommonService.RedirectParams = para;
return $state.target('login');
}
else if (CommonService.RedirectState && $auth.isAuthenticated())
{
var target = $state.target(CommonService.RedirectState, CommonService.RedirectParams._params);
CommonService.RedirectState = null;
CommonService.RedirectParams = null;
return target;
}
});
}]).service('CommonService', [
function ()
{
this.RedirectState = null;
this.RedirectParams = null;
}]);
我在 angular 代码中使用 satellizer 来处理本地 api 的身份验证。我没有将任何第三方 API 身份验证与我的站点集成,一切都是本地的。我让网站正常工作,如果用户使用无效令牌,系统会将用户重定向到登录页面。如果我需要在用户登录后带回请求的 link 怎么办?
例如。如果用户请求访问'/customer/detail/123',但用户被重定向到登录页面(/account/login),登录成功后,如何将用户重定向回'/customer/detail/123 '
Satellizer 无法帮助您解决这个问题。我也 运行 参与其中并创建了一个服务来处理这个问题。因此,如果用户被重定向到 /login,我会将路径保存在服务中。登录后,通过从服务中获取它来重定向到保存的路径。
当使用 ui-router 时,通过监听 '$stateChangeStart' 检测每一个变化。当状态改变并且需要登录时,通过从以下位置获取当前路径来保存当前路径:'$location.path()'
登录后,设置路径为$location.path();
希望这对您有所帮助。 刘
我在我的项目中做着完全相同的事情。检查这个。
$rootScope.$on('$stateChangeStart', function(event, next, current) {
if(next.name != 'user_login' && next.name != 'user_register')
{
// I am using localStorage module but you can do the same
// using your way of storing values to localstorage
localStorageService.set('redirect_back_path', next.name);
localStorageService.set('redirect_back_path_params', current);
}
});
这里我存储了两个值,redirect_back_path
用于存储每个请求的当前请求的状态名称,redirect_back_path_params
用于存储当前请求具有的参数,"like 123 in your example"。
我不知道为什么 angular 将即将到来的请求的参数保存到 current
对象。也许其他人可以在这里回答。
好的,现在你需要做的是,登录后,检查redirect_back_path
中是否有任何值,如果有,
$state.go(localStorageService.get('redirect_back_path'), localStorageService.get('redirect_back_path_params');
否则只需转到任何其他默认页面。
希望对您有所帮助。
我运行和satellizer
进入同一个问题自 ui-router 1.0.0-alpha1 起,不再支持 $stateChangeStart 和此类事件:https://github.com/angular-ui/ui-router/issues/2655
我正在使用以下工具并且运行良好:
satellizer 0.15.5,ui-router 1.0.0-beta.3,angular 1.6.1
app.run(['$transitions', '$state', '$auth', 'CommonService', function ($transitions, $state, $auth, CommonService) {
$transitions.onStart({}, function (transition) {
var state = transition.to();
if (state.resolve && state.resolve.loginRequired && !$auth.isAuthenticated())
{
CommonService.RedirectState = state.name;
return $state.target('login');
}
else if (CommonService.RedirectState && $auth.isAuthenticated())
{
var target = $state.target(CommonService.RedirectState);
CommonService.RedirectState = null;
return target;
}
});
}]).service('CommonService', [
function ()
{
this.RedirectState = null;
}]);
当用户请求受限(解析:loginRequired)状态且未通过身份验证时,我们会将状态存储在服务中并将他重定向到 'login' 状态。
稍后当用户通过身份验证时,我们发现服务中有一个 'RedirectState'(即使 satellizer 默认重定向到 '/'),我们只是将用户重定向到 'CommonService.RedirectState'并删除服务中的引用。不需要本地存储/其他模块。没有对 satelizer 默认配置进行任何更改。我只是在路由配置之后添加了这个。
在DavidT的基础上,改成原参数重定向:
app.run(['$transitions', '$state', '$auth', 'CommonService', function ($transitions, $state, $auth, CommonService) {
$transitions.onStart({}, function (transition) {
var state = transition.to();
var para = transition.targetState();
if (state.resolve && state.resolve.loginRequired && !$auth.isAuthenticated())
{
CommonService.RedirectState = state.name;
CommonService.RedirectParams = para;
return $state.target('login');
}
else if (CommonService.RedirectState && $auth.isAuthenticated())
{
var target = $state.target(CommonService.RedirectState, CommonService.RedirectParams._params);
CommonService.RedirectState = null;
CommonService.RedirectParams = null;
return target;
}
});
}]).service('CommonService', [
function ()
{
this.RedirectState = null;
this.RedirectParams = null;
}]);