我正在创建一个新站点,我希望用户能够使用多种方式登录,基本上用户应该能够在我的站点上创建一个新用户或者使用 Facebook 连接或者使用 Twitter 的帐户登录进入网站。
我看过几个关于使用其中一种方法的教程,我想知道的是,您认为最好的方法是什么?
到目前为止,我认为最好的方法是创建自定义身份验证模型(类似于对现有授权类进行子类型化)。
这是最好的方法吗? 你能给我举一个尝试类似事情的好例子吗?
非常感谢
最佳答案
我最近在博客上写了类似的东西......这是我采用的方法
public class User {
public int UserID { get; set; }
public string Name { get; set; }
public string Page { get; set; }
public virtual Authentication Authentication { get; set; }
}
public class Authentication {
public int Id { get; set; }
public string LoginId { get; set; }
public string Provider { get; set; }
public string Password { get; set; }
public virtual User User { get; set; }
}
//login methods
User StandardUserLogin(string username) {
IDataContext db = new DataContext();
var user = db.Users.SingleOrDefault(u => u.Authentication.LoginId == username);
if (user != null) {
if (user.Authentication.Password == password) {
SetAuthenticationTicket(user);
return user;
}
}
}
我会根据授权方案的工作方式为每种类型的登录创建不同的登录方法。
User OpenIdUserLogin(string username) {
IDataContext db = new DataContext();
var user = db.Users.SingleOrDefault(u => u.Authentication.LoginId == username && u.Authentication.Provider == "openid");
if (user == null) {
//create new openid user
}
if (user.Authentication.LoginId == id) {
SetAuthenticationTicket(user);
return user;
}
}
//openid's authentication method
[ValidateInput(false)]
public ActionResult Authenticate(string returnUrl) {
IAuthenticationResponse response = OpenId.GetResponse();
if (response == null) {
//make openid request here
} else {
var user = OpenIdUserLogin(response.ClaimedIdentifier);
}
}
顺便说一句,顶部的两个类代表我的 Entity Framework POCO 这里的关键是与用户表分开的身份验证表。它允许一个用户使用多种登录方法。希望这可以帮助您走上正轨。
关于asp.net-mvc - 使用 Asp.Net MVC 的混合身份验证(Forms、FB connect、twitter、openId),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3689269/