您不需要密碼就可以對身份中的用戶進行身份驗證。只需要根據令牌找到相關用戶即可。考慮這個簡單的例子:
public ActionResult UrlAuth(string token)
{
var userManager=HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
// imaging you have a custom token manager which return userID form token
string userID=_tokenManager.GetUserIDByToken(token);
var user = userManager.FindById(userID);
if (user != null)
{
var ident = userManager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie);
HttpContext.GetOwinContext().Authentication.SignIn(new AuthenticationProperties { IsPersistent = false }, ident);
// authentication succeed do what you want
return Redirect("Wherever");
}
ModelState.AddModelError("", "Invalid username or password");
return View();
}
喜山姆,這看起來很簡單!感謝您的快速答覆。我明天會試試!親切的問候 – user4494221
如果你正在談論由身份產生的令牌,那麼我不認爲有可能推斷出什麼用戶有什麼令牌,因爲令牌是由密碼生成的(或者可以這樣做?)。我建議傳遞一個userId和令牌一樣,默認的模板和密碼reset一樣:通過傳遞ID來查找用戶,驗證令牌;如果令牌無誤,請登錄用戶。 – trailmax
@trailmax我假設了令牌管理器並生成了完全獨立於標識的令牌。也許生成的令牌是唯一的並映射到用戶ID。或者用戶標識已經嵌入到生成的令牌中。這個答案的重點是如何驗證用戶沒有密碼的問題。生成和管理令牌是另一回事。 –