2017-10-04 15 views
0

私はMVCアプリケーションのログイン認証に取り組んでいます。私はこの問題で長い間努力しています。ログインが成功した後、私はホームページにリダイレクトしたいが、私のコード$ location.path( '/ home')は何もしない。そして、私はそれがapp.jsの私のrouteproviderで与えられている私のデフォルトのパスに常に行くことがわかった。

誰が

app.js

var app = angular.module('myApp', [ 
"toastr", 
"ui.bootstrap", 
"ngRoute", 
"datatables", 
"ngMaterial", 
"ngMessages", 
"material.svgAssetsCache" 
]); 

app.config(["$routeProvider", "$locationProvider", 
function ($routeProvider, $locationProvider) { 
    console.log('$routeProvider' + JSON.stringify($routeProvider)); 
    console.log('$locationProvider' + $locationProvider); 
    //return 
    $routeProvider.when("/login", 
     { 
      redirectTo: "/login" 
     }).when("/Home", 
     { 
      redirectTo: "~/Home/Index/" 
      //controller: "MyCtrl" 
     }).when("/user", 
     { 
      redirectTo: "/User/" 
     }).when("/adduser", 
     { 
      redirectTo: "/User/User" 
     }).when("/role", 
     { 
      redirectTo: "/Role/" 
     }).when("/addrole", 
     { 
      redirectTo: "/Role/AddRole" 
     }).when("/settings", 
     { 
      redirectTo: "/Settings/" 
     }).when("/Editsettings", 
     { 
      redirectTo: "/Settings/Edit/" 
     }).when("/uploadData", 
     { 
      redirectTo: "/UploadDataFile/" 
     }).otherwise(
     { 
      redirectTo: '/Test/Index' 
     }); 
    $locationProvider.html5Mode({ 
     enabled: true, 
     requireBase: false 
    }).hashPrefix('!'); //Remove the '#' from URL. 
}]) 

Login.js

app.controller('LoginCtrl', function ($scope, $location, $http, $window) { 
$scope.ddlDomain = [ 'AS', 'EU', 'LA']; 
$scope.Domain = $scope.ddlDomain[0].value; 

// send to your controller 
$scope.LoginClick = function() { 
    var User = { 
     UserId: $scope.UserId, 
     Password: $scope.Password, 
     Domain: $scope.Domain 
    } 

    $http({ 
     method: "post", 
     url: "/Login/SSOLogin", 
     data: { 'user': User } 
    }).then(function (response) { 

     if ((response.data.Message == "") || (response.data.Message == null)) {        
      $location.path('/Home'); 

      if (!$scope.$$phase) { 
       //$digest or $apply 
       $scope.$apply();  
      } 
     } else { 
      $scope.errormsg = response.data.Message; 
     } 
     // handle success here 
    }, function (response) { 
     console.log("err" + response.data); 
      // handle error here 
     }); 
} 
}); 
+0

本当に問題はありませんか?エラーハンドラはノーオペレーションです。さらに、 '$ location.path( '/ Home')'を打つために応答条件が満たされていることを確かめますか? – Phix

+0

@Phix:ええ、応答条件が満たされています。私のrouteconfigでは、それは常に "それ以外の"条件に当たっています。 –

+0

なぜ多くの 'redirectTo'ですか? – Phix

答えて

0

この設定..私が作ったもののミスを私に提案してください:

$routeProvider 
    .when("/login", { 
    redirectTo: "/login" 
    }) 
    .when("/Home", { 
    redirectTo: "~/Home/Index/" 
    //controller: "MyCtrl" 
    }) 

Itをにリダイレクトしているようですが期待どおりに処理されていますが、存在しない~/Home/Index/にすぐにリダイレクトされるため、3番目のリダイレクトはotherwiseブロックに転送されます。

編集

アドレッシングコメント:

しかし、私はページホーム/インデックスを持っています。

ああ申し訳ありません。私はは、上記の設定で定義されたルートではありません...その後も

私の男を働いていない、でも〜削除した後に試してみました。このルートの設定毎

$routeProvider.when("/Home", { 
    redirectTo: "~/Home/Index/" 
    //controller: "MyCtrl" 
}) 

あなたは再び、あなたが投稿した構成で定義されていない/Home/Indexと呼ばれる非存在ルートへ/Homeからリダイレクトされます。ここで

は角が言っていることだ。

`/Home` => 
    "Ok, when the user hits this route, 
    I need to redirect them to `/Home/Index` because 
    that's what I was told to do." 
`/Home/Index` => "Hmm, I don't see that route configured. Exiting. 
=> Fall back to my `otherwise` block." 

あなたは

を言ったしかし、私はページホーム/インデックスを持っています。

これはどういう意味ですか? 「ホーム」と呼ばれるディレクトリの中に「インデックス」という名前の文書がありますか? AngularJSはこのように動作しません。

+0

私はangularjsを初めて使っています。あなたの答えを教えてください。実際にそこに間違っているのは何ですか?私は何を変えるべきですか? –

+0

あなたが言っていることは、「ユーザーが '/ Home'に行くことをリクエストしたときに'〜/ Home/Index'にリダイレクトします ''〜/ Home/Index''が存在しないので、AngularJSは ' – Phix

+0

しかし、私はページHome/indexを持っています –

関連する問題