我正在创建一个新网站,我希望用户能够使用多种方式登录,基本上用户应该能够在我的网站上创建新用户或使用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); } }
顺便说一句,顶部的两个类代表我的实体框架POCO这里的关键是身份验证表,它与用户表分开.它允许一个用户拥有多种登录方式.希望这可以帮助您实现正常运行.