Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS$location.path()不适用于returnUrl_Angularjs - Fatal编程技术网

AngularJS$location.path()不适用于returnUrl

AngularJS$location.path()不适用于returnUrl,angularjs,Angularjs,我有一个使用AngularJS的水疗中心。我刚刚添加了安全性/身份验证功能,除了在查询字符串中存在returnUrl时在登录后重定向外,其他功能都运行得很好 我的应用程序中有代码,如果没有用户经过身份验证,该代码将重定向到我的登录路径。例如,如果用户试图访问http://localhost:55841/#/group/15(需要身份验证),它将重定向到具有以下URL的登录路径: http://localhost:55841/#/login?returnUrl=%2Fgroup%2F15 以下是我

我有一个使用AngularJS的水疗中心。我刚刚添加了安全性/身份验证功能,除了在查询字符串中存在
returnUrl
时在登录后重定向外,其他功能都运行得很好

我的应用程序中有代码,如果没有用户经过身份验证,该代码将重定向到我的登录路径。例如,如果用户试图访问
http://localhost:55841/#/group/15
(需要身份验证),它将重定向到具有以下URL的登录路径:

http://localhost:55841/#/login?returnUrl=%2Fgroup%2F15

以下是我的登录方法,如果成功登录时存在returnUrl路由,则应重定向到该路由:

var login = function (credentials) {
    return $http.post(baseUrl + 'api/login', credentials).then(function (response) {
        //do stuff
        var returnUrl = $location.search().returnUrl;
        if (returnUrl) {
            $location.path(returnUrl);
            //$location.path('/group/15');
        }
        $location.path('/');
    });
};
当我调试登录方法时,returnUrl的值是
/group/15
,这是我所期望的,但它会导航到以下URL:

http://localhost:55841/#/?returnUrl=%2Fgroup%2F15

提前感谢

逻辑代码错误,请检查此解决方案和您的分支。
var login=function(凭证){
返回$http.post(baseUrl+'api/login',凭证)。然后返回(函数(响应){
$rootScope.currentUser=response.data;
$rootScope.$broadcast('currentUser',response.data);
var returnUrl=$location.search().returnUrl;
如果(返回URL){
log('重定向到:'+returnUrl);

$location.path(decodeURI(returnUrl));//如果要在其他url上重新检测,则可以使用“$window.location.href=”/”;”进行重定向,但对于路由重定向,可以使用$location.path(“/someNewPath”);$location.replace();需要取消对返回url的扫描。请尝试使用
decodeURIComponent()
function.Doh.谢谢!看起来我还必须从查询字符串中删除returnUrl,如下所示:
$location.path(returnUrl.search('returnUrl',null);
。但这很有效。decodeURI有什么意义?它似乎可以正确解码。不,它不会被解码。URL可以被解析为“编码”进入URI路径。这是一种正常行为。->&当我不解码它时,returnUrl等于
/group/15
。需要解码的returnUrl示例是什么?是的,取决于您的位置。例如
$cookie
会将数据URL编码保存到cookie中。以确保对该持久性进行正确的数据处理。
var login = function (credentials) {
    return $http.post(baseUrl + 'api/login', credentials).then(function (response) {
        $rootScope.currentUser = response.data;
        $rootScope.$broadcast('currentUser', response.data);
        var returnUrl = $location.search().returnUrl;
        if (returnUrl) {
            console.log('Redirect to:' + returnUrl);
            $location.path(decodeURI(returnUrl)); // <- executed first, but not redirect directly.
            //$location.path('/group/15');
        } else { //else :)
           console.log('Redirect returnUrl not found. Directing to "/".');
           $location.path('/'); // <- only redirect if no returnUrl isset/true
       }
    }, function (response) {
        $rootScope.currentUser = null;
        $rootScope.$broadcast('currentUser', null);
        return $q.reject(response);
    });
};