2015-03-31 124 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