2017-05-09 9 views
-3

前のURLを空のセッションで取得しようとしています。たとえば、ユーザーがurlと入力して直接Webページを開いたとします。 xyz.com/dashboard/にログインしていないため、セッションが空であるためxyz.com/login/にリダイレクトされ、資格情報を入力してxyz.com/dashboard/に自動的にリダイレクトされます。ASP.NET MVCでセッションの期限切れの前のURLを取得する方法

ありがとう

+0

はStackOverflowのへようこそhttp://stackoverflow.com/helpを見てください。 /どのように質問をするかについての質問。あなたはこの質問に対して良い答えを得ることはまずありません。 – gsharp

+0

私はあなたの評判をリセットしました。質問を改善するために時間をかけてください(主にあなたの努力を示す情報が欠けています)。 –

答えて

1

ユーザーをxyz.com/login?next=<the url user accessed>にリダイレクトしてから、正常にログインした後、nextクエリ文字列値で指定されたURLにユーザーをリダイレクトします。

+0

私は通常、このアプローチを使用しましたが、私は思ったクッキーとセッションを使って同じことをすることもできます。 –

+1

@MAdeelKhalidはい、できます。基本的には、HTTPのステートレスな性質のため、要求の一部として以前のURLを何とか送信することです。 – Ankur

+0

同意します。ただし、2人の異なるユーザー/ユーザーのセッションが同時に期限切れになり、異なるページでは、両方のクエリ文字列がどのようにユニークになるのでしょうか? –

0

@Ankurの答えを補足するために、MVCとAngular JSコードを含めて、必要な動作を実現しています。

AccountController.cs

 [HttpGet] 
     [Route("login")] 
     public ActionResult Login(string returnUrl) 
     { 
      if (Request.IsAuthenticated) 
       return RedirectToAction("Home", "Dashboard"); 

      return View(new AccountLoginModel() { ReturnUrl = returnUrl }); 
     } 

     [HttpGet] 
     public ActionResult Login() 
     { 

      if (Request.IsAuthenticated) 
       return RedirectToAction("Home", "Dashboard"); 

      return View(new AccountLoginModel() { ReturnUrl = string.Empty }); 
     } 

Login.chtml

<div data-ng-controller="AccountLoginViewModel" ng-init="returnUrl = '@Model.ReturnUrl'" class="centered"> 

... HTML code here 

<button type="button" class="btn" ng-click="login()">Login</button> 

</div> 

AccountLoginViewModel.js

$scope.login = function() { 
      viewModelHelper.apiPost('api/account/login', $scope.accountModel, 
       function (result) { 

        if ($scope.returnUrl != '' && $scope.returnUrl.length > 1) { 
         window.location.href = rootPath + $scope.returnUrl.substring(1); 
        } 
        else { 
         window.location.href = rootPath + "dashboard/home"; 
        } 
       }); 
     } 
    } 
関連する問題