我想知道为什么WebSecurity.Login(用户名,密码)返回false,而WebSecurity.Exists(用户名)确实返回true

时间:2017-01-22 14:27:30

标签: c# wcf asp.net-membership

我和MVC一起创建了WCF项目。我已经实现了默认MVC模板的SimpleMembership数据库,以便注册和登录我能够成功实现的用户。但是我无法使用相同的WebSecurity.Login(UserName,Password)方法查询相同的数据库表,例如UserProfiels(UserId,UserName),webpages_Membership(UserId,Password,PasswordSalt,....)。

MVC项目中的注册方法为

// Attempt to register the user
            try
            {
                WebSecurity.CreateUserAndAccount(model.UserName, model.Password);                   
                WebSecurity.Login(model.UserName, model.Password);
                return RedirectToAction("Index", "Home");
            }
            catch (MembershipCreateUserException e)
            {
                ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
            }

WCF项目中的WebSecurity.Login(用户名,密码)方法如下

public string LoginService(string UserName, string Password)
    {
        try
        {

            string answer = null;
            if (WebSecurity.UserExists(UserName)) // returns true
            {
              if(WebSecurity.Login(UserName,Password)) // always return false
              {
                  string role = Roles.GetRolesForUser(UserName).FirstOrDefault();
                  answer = role;

              }

            }
            return answer;



        }
        catch (Exception)
        {
            return null;
        }
    }

我想知道为什么WebSecurity.Login(UserName,Password)永远不会填充UserProfile和webpages_Membership表,其中存在用户名和相应的密码。

我没有更新任何web.config文件,因为它具有db连接和WCF Rest绑定的默认设置,可以很好地工作。

我在这里查看https://msdn.microsoft.com/en-us/library/webmatrix.webdata.websecurity.login(v=vs.111).aspx并在谷歌搜索但未找到满意的解决方案。

非常感谢任何代码段或建议。

谢谢

1 个答案:

答案 0 :(得分:0)

我假设您将MVC和WCF应用程序作为单独的站点运行,并且您看到用户出现在数据库中。

默认情况下,如果您不做其他任何更改,ASP.NET将为每个站点生成一个不同的应用程序名称(请参阅the remarks here),并且用户将按应用程序进行分区 - 这可能是原因您无法在WCF网站上登录用户。

docs for UserExists州:

  

该方法验证用户是否存在于用户配置文件表中。但是,它不会验证该用户的会员帐户是否存在

看起来配置文件没有以相同的方式进行分区。

如果在成员资格配置中设置ApplicationName,您将能够在两个应用程序上使用相同的数据库和登录。