Asp.net 实现一个定制的成员资格提供程序,要求有点奇怪

Asp.net 实现一个定制的成员资格提供程序,要求有点奇怪,asp.net,asp.net-membership,membership-provider,mobile-website,Asp.net,Asp.net Membership,Membership Provider,Mobile Website,为移动用户在手机上购买和下载内容构建新的移动网络平台。在过去,我们使用了一种完全定制的登录机制,但我正在研究在下一个版本的平台上使用定制的成员资格提供商 问题是,我们有一些稍微奇怪的“登录”机制要求,所以我不能100%确定成员资格提供商是否最合适 只是想通过“是的,会员资格提供商非常适合”或“不,你是在开方便之门” 要求 用户可能需要使用“手机号码”(用户名)和“Pin”(密码)登录 这非常适合,因为他们已经注册并确认了SMS,并且它满足了ValidateUser(字符串用户名、字符串密码)方法

为移动用户在手机上购买和下载内容构建新的移动网络平台。在过去,我们使用了一种完全定制的登录机制,但我正在研究在下一个版本的平台上使用定制的成员资格提供商

问题是,我们有一些稍微奇怪的“登录”机制要求,所以我不能100%确定成员资格提供商是否最合适

只是想通过“是的,会员资格提供商非常适合”或“不,你是在开方便之门”

要求

  • 用户可能需要使用“手机号码”(用户名)和“Pin”(密码)登录 这非常适合,因为他们已经注册并确认了SMS,并且它满足了
    ValidateUser(字符串用户名、字符串密码)
    方法实现

  • 用户可能需要仅使用“手机号码”登录。在这种情况下,我们不需要费心在我们这边进行身份验证。它减少了用户的步骤数量,并且在我们尝试向特定操作员开票时,由特定操作员进行验证。(运营商可以验证输入的手机号码是否与手机在进入运营商支付网站时匹配)。。。因此,即使用户有密码,我们也需要以某种方式吓唬会员提供商,让他们使用空白密码进入

  • 用户根本不需要登录。在这种情况下,我们可以透明地将用户跳转到一个特殊的网络运营商网页,当他们透明地返回给我们时,我们将在标题中获得手机号码。在这种情况下,我们需要以编程方式从标题中获取该数字,在代码隐藏中代表他们执行登录(同样没有任何pin/密码),用户将神奇地自动登录

  • 要求2和3为奇数位。我们基本上有3种不同的登录机制,一个成员资格提供者需要满足这些机制

    • 用户输入的手机和用户输入的Pin
    • 用户仅输入手机(我认为代码隐藏可以满足pin要求)
    • 完全透明的登录(代码隐藏完成整个登录过程)

    任何人对上述内容有任何评论/反馈,或者对您过去所做的任何奇怪的会员资格提供商实施有任何建议。

    我认为它可以工作。我们在我们的一个网站上做了#3。下面是我们用来处理它的一段代码。要使用此功能,请创建一个登录页面(transparentlogin.aspx或类似的页面),确保web.config文件允许匿名访问此页面,并在transparentlogin.aspx页面的page_load函数中输入如下代码:

    const string specialpassword = "ThisIsOurSpecialPasswordForBehindTheScenesLogin";
    
    if (MobileNumberFoundInHeader())
    {
      string username = GetMobileNumberFromHeaders();
      // Authenticate the user behind the scenes
      System.Web.Security.FormsAuthentication.SetAuthCookie(username, false);
      System.Web.Security.FormsAuthentication.Authenticate(username, specialpassword);
    }
    else
    {
      throw new Exception ("Mobile Number Missing");
    }
    
    然后,在MembershipProvider中的ValidateUser函数中,确保执行如下检查:

    public override bool ValidateUser(string username, string password)
    {
     const string specialpassword = "ThisIsOurSpecialPasswordForBehindTheScenesLogin";
    
     bool ValidationSuccess = false;
    
     // If the password being passed in is the right secret key (same  
     // for all users), then we will say that the password matches the
     // username, thus allowing the user to login 
     if (password == specialpassword)
     {
       ValidationSuccess = true;
     }
    
     if (DoStandardUsernamePasswordVerification() == true)
     {
       ValidationSuccess = true;
     }
    
     return ValidationSuccess;
    }
    
    至于要求2,我有点困惑。接线员到底是什么?我以为我们是在用手机通过网络浏览器浏览网站。接线员在哪里工作?如果我上面提出的解决方案没有帮助,请在回复中提供有关运营商的更多详细信息


    蒂姆

    干杯。。。是的,这就是我得出的结论。回复:“运营商”。。。我是说手机网络运营商。。。e、 AT&T、沃达丰、T-Mobile等……我的问题和你们的差不多。。如果你能建议我做什么。=>Q:我正在开发自定义成员资格提供程序,我允许用户通过emailID以用户名登录,但MembershipProvider.ValidateUser()以用户名为参数(我的用户也有用户名,只是为了在他们的个人资料中显示)。那我该怎么办呢。目前,我已实现ValidateUser()以在该参数中获取emailid。。但这看起来不是一个好的练习。。那怎么办???