0

我正在构建一个带有表单身份验证的ASP.NET MVC 4应用程序。

在我的帐户控制器中,我从表单中收到用户名和密码。

如果用户名/密码正确,Web 服务会返回真/假。

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Login(LoginModel model, string returnUrl)
    {
         bool isValid=MyWebService.ValidateLogin(model.Name,model.Pass);

          if(isValid){
            *** Here: Tell ASP.NET that model.Name is a logged in user
            ***       and to keep a cookie so that they stay logged in ???
            RedirectToAction(...);
           }
     }  

我希望尽可能多地利用 ASP.NET 基础结构,但要使用 Web 服务来正确登录。

4

2 回答 2

2

使用框架级支持执行此操作的最全面方法是实现自定义MembershipProvider. 它非常简单,并且有非常易于实现的功能。如果您想利用其他成员资格、身份验证和授权,这可能是您的最佳途径。以下是您的步骤:

  • 创建一个名为的新类YourMembershipProvider
  • 继承MembershipProvider并实现抽象方法
  • 查看方法并实现重要的方法,即:
    • ValidateUser
    • GetUser

GetUserusername使用您的网络服务来查找您想要跟踪的任何相关会员详细信息。

ValidateUser将是您调用 Web 服务的位置。true如果用户签出,则返回。

最后,更新您的网络配置。在 System.Web 中,你需要这样的东西:

<membership defaultProvider="YourMembershipProvider">
  <providers>
    <clear />
    <add name="YourMembershipProvider" type="YourNamespace.YourMembershipProvider" />
  </providers>
</membership>

所以,回顾一下……实现你的类,连接你的网络配置,使用框架来处理其余的。

干杯。

于 2013-02-23T00:37:10.487 回答
1

对我来说看起来不错,也许我会在您对 Web 服务的调用中添加另一个参数,以在登录时出错时返回错误值。

bool isValid=MyWebService.ValidateLogin(model.Name,model.Pass, rtnErrorStatusCode);

一旦您的网络服务登录了用户,您可以随时检查用户是否登录

If (Request.IsAuthenticated = False) Then
  ' This user has not logged in
  ' redirect to login page here
End if

至于 cookie,我想只有在你想保留一些会话信息时才需要它。

保存 cookie 只会为您提供一种了解用户已登录的不同方法,但“Request.Authenticated”语句还会告诉您用户是否已登录,因为它返回一个布尔值,所以可能有 cookie只是复制它,所以除非您存储会话特定信息(如用户首选项或主题等),否则可能不需要 cookie。

于 2013-02-23T01:02:31.263 回答