在我更改web.config中的数据库后,添加了如下连接字符串:
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;.....20140526021501;Integrated Security=True" providerName="System.Data.SqlClient" />
<add name="identityDB" connectionString="Server=....Trusted_Connection=False;Encrypt=True;Connection Timeout=30;" providerName="System.Data.SqlClient" />
</connectionStrings>
当然&#34; DefaultConnection&#34;我总是在那里添加&#34; identityDB&#34;我正在使用它:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("identityDB")
{
}
注意:&#39; identityDB&#39;是Azure(云)中的SQL数据库。
问题:
当我在网站上注册时,用户将被添加到右侧表格中的所有数据库中(所有字段都正确且一切都很好)。
但是当我尝试使用我注册的用户名和密码登录时,我会获得&#34; Invaild用户名或密码&#34;消息,我不知道为什么......
我调试了一下,我可以在这里看到:
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
var user = await UserManager.FindAsync(model.Email, model.Password);
if (user != null)
{
await SignInAsync(user, model.RememberMe);
return RedirectToLocal(returnUrl);
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}
用户在&#34;中返回null,如果&#34;声明,有什么问题?我无法理解为什么我可以注册,但登录失败...
有人有想法吗?
答案 0 :(得分:1)
问题:
出于某种原因这行代码:
await UserManager.FindAsync(model.Email, model.Password);
由于我理解“model.Email”与“model.userName”混合而且我没有“UserName”的这个属性所以我需要将此行更改为其他并且仍然执行相同的操作
解决方案:
我会传递我的代码,但首先要解释我做了什么:
我用几行完成了有问题的行,这些行按照不同的顺序执行了确切的操作:
这是我的代码:
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
PasswordVerificationResult result = PasswordVerificationResult.Failed;
//var user = await UserManager.FindAsync(model.Email, model.Password);
var user = await UserManager.FindByEmailAsync(model.Email);
if (user != null)
{
result = UserManager.PasswordHasher.VerifyHashedPassword(user.PasswordHash, model.Password);
if (!(result == PasswordVerificationResult.Success))
{
ModelState.AddModelError("", "Invalid name or password.");
}
else
{
await SignInAsync(user, model.RememberMe);
return RedirectToLocal(returnUrl);
}
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
正如你所看到的那样,我采用了“有问题的路线”并对其进行了评论。
希望它能帮助别人,祝你好运!
答案 1 :(得分:0)
我建议你更新Identity 2.0(但要小心)。也是通过这个连接字符串它应该工作我猜。你可以在db中注册用户但你无法使用它登录是很奇怪的。这可能意味着当您注册用户时,它会将其保存到您的数据库中,并在您登录时搜索您的本地数据库(您使用项目部署在azure上)。我会删除本地db和con字符串。但是如果你指定你的constring是没有意义的(检查所有con字符串,清除浏览器缓存做一些幻影技巧......)。其他可能是您输入了错误的密码。设置密码验证以允许您输入例如。 111111或一些简单的,以消除打字中的一些错误。