2015-03-31 82 views
0

我有一個使用C#MVC構建的項目。我試圖在一個視圖中構建一個解決方案,只有當您登錄時纔會顯示某些內容。 我知道如何使用Razor完成此操作,但視圖是.html。 是否可以使用Angular驗證用戶是否已登錄?MVC,使用AngularJS進行登錄驗證

編輯

我試圖遵循巴爾韋德的建議。以下是我目前的設置,但我在CONSOL收到此錯誤:

Error: [$injector:unpr] Unknown provider: loginServiceProvider <- loginService 

MatchController:

[Route("api/Match/userAuthentication")] 
    public IHttpActionResult GenerateTournamentTree() 
    { 
     bool isLoggedIn = false; 
     if (User.Identity.IsAuthenticated) { 
      isLoggedIn = true; 
     } 

     return Json(new { Result = isLoggedIn }); 

    } 

我不知道如果返回類型應該是使用JSON?

fightCardController.js:

angular.module('FightCardModule').controller("FightCardController", 
    ['$scope', '$modal', '$http', '$routeParams', 'guidGenerator', 'eventBus', domainName + "Service", 'MatchModelFactory', 'loginService', 
function ($scope, $modal, $http, $routeParams, guidGenerator, eventBus, domainService, modelFactory, loginService) { 

$scope.isUserLoggedIn = false; 
     loginService.isUserLoggedIn().success(function (data) { 
      $scope.isuserLoggedIn = data; 
     }); 

})(); 

loginService.js:

app.factory('loginService', ['$http', function ($http) { 
return { 
    isUserLoggedIn: function() { 
     url = "/Match/userAuthentication" 
     return $http.get(url); 
    } 
} 
}]); 

在此先感謝。

回答

1

好吧,ValVerdes幫助我想出了一個解決方案。謝謝Valverde!

筆者認爲:

<div ng-show="isLoggedIn == 1" ... > 
You are logged in! 
</div> 

我的控制器:

 [Route("api/Match/userAuthentication")] 
    public IHttpActionResult userAuthentication(List<String> stringOfLoginStatus) 
    { 
     int isLoggedIn = Int32.Parse(stringOfLoginStatus[0]); 
     if (User.Identity.IsAuthenticated) { 
      isLoggedIn = 1; 
     } 

     return Json(new { Result = isLoggedIn }); 

    } 

我controller.js:

$scope.isLoggedIn; 

    $scope.isUserLoggedIn = function() { 

     var isCurrentUserLoggedIn; 
     var stringOfLoginStatus = new Array(); 
     stringOfLoginStatus[0] = 0; 
     $.ajax({ 
      type: "POST", 
      url: "/Api/Match/userAuthentication", 
      contentType: 'application/json; charset=utf-8', 
      data: JSON.stringify(stringOfLoginStatus), 
      success: function (data) { 
       $scope.isLoggedIn = data.Result; 
       data.Result; 
      }, 
      dataType: "json", 
      traditional: true 
     }); 

    } 
2

您可以創建service是檢查用戶登錄:

app.factory('loginService', ['$http', function ($http) { 
    return { 
     isUserLoggedIn: function() { 
      url = // address to your Action in Controller that returns true/false 
        // for example: 'UserController/IsUserLoggedId' 
      return $http.get(url); 
     } 
    } 
}]); 

然後你就可以在你的控制器使用方法:

app.controller('controllerName', ['$scope', 'loginService', function ($scope, loginService) { 
    $scope.isUserLoggedIn = false; 
    loginService.isUserLoggedIn().success(function (data) { 
     $scope.isuserLoggedIn = data; 
    }; 
}; 

現在你可以顯示或使用隱藏任何html blockng-showng-hide

<div ng-show="isUserLoggedIn" ... > 
    ... 
</div> 
+0

嗨巴爾韋德。這麼晚纔回復很抱歉!我試圖遵循你的建議,並且編輯了我迄今爲止所完成的問題。 – 2015-04-15 12:27:03

+1

Hi Casper,當Angular找不到這樣的模塊或提供或其他東西時,這是一個角度錯誤'[$ injector:unpr]'。最常見的原因是未附加的文件。確保你沒有忘記用'loginService'加載'js'文件。例如'' – valverde93 2015-04-15 12:49:05

+1

並且'Json'不需要返回類型。你可以發送'bool'值(偶數對象),'$ http'服務將獨立解析對Json的響應。 – valverde93 2015-04-15 13:10:24

相關問題