2017-01-22 56 views
0

我已经创建了WCF项目与MVC。我已经实现了默认MVC模板的SimpleMembership数据库,以便我能够成功实现注册和登录用户。但是,通过使用相同的WebSecurity.Login(用户名,密码)方法,我无法查询相同的数据库表,即UserProfiels(UserId,UserName),webpages_Membership(UserId,Password,PasswordSalt,....)。在MVC项目我不知道为什么WebSecurity.Login(用户名,密码)返回false,而WebSecurity.Exists(用户名)确实返回true

注册方法为

// 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)); 
      } 

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

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(用户名,密码)永远不会填充用户名和相应密码存在的UserProfile和webpages_Membership表。

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

我在这里看了一下https://msdn.microsoft.com/en-us/library/webmatrix.webdata.websecurity.login(v=vs.111).aspx并在google上搜索,但找不到满意的解决方案。

高度赞赏任何代码片段或建议。

谢谢

回答

0

我假设你正在运行的MVC和WCF应用程序作为单独的网站,和你看到出现在数据库中的用户。

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

docs for UserExists状态:

的方法,验证用户在用户简档表中存在。但是,它并未验证该用户是否存在成员资格帐户

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

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

相关问题