在使用OpenId的站点中跟踪当前用户的推荐解决方案是什么?假设我有一个带有id和声明标识符的Users表,然后是我的站点特定信息,用户想要更新他们的站点特定信息。在我没有使用内置会员的情况下,跟踪当前用户的最佳方法是什么?我是否应该在每次用户尝试更新其配置文件时向openid发送请求以获取ClaimedIdentifier ?或者只是强制用户名是唯一的,并根据user . identity . name获取用户信息?
我用cookie来做:)…你可能会发现我的答案很有用:Stack Overflow真正使用的是什么OpenID解决方案?
我也写了一篇简单的博文:http://codesprout.blogspot.com/2011/03/using-dotnetopenauth-to-create-simple.html
public class User
{
[DisplayName("User ID")]
public int UserID{ get; set; }
[Required]
[DisplayName("Open ID")]
public string OpenID { get; set; }
[DisplayName("User Name")]
public string UserName{ get; set; }
}
在我的例子中,我使用OpenID登录并将其存储在cookie中,但您可以在cookie中存储其他信息,例如用户名:
public class FormsAuthenticationService : IFormsAuthenticationService
{
public void SignIn(string userName, bool createPersistentCookie)
{
if (String.IsNullOrEmpty(serName)) throw new ArgumentException("The user name cannot be null or empty.", "UserName");
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
}
public void SignOut()
{
FormsAuthentication.SignOut();
}
}
更新2.0:
比如这样(这是视图):
<%
if (Request.IsAuthenticated)
{
string name = Request.Cookies[Page.User.Identity.Name] == null ? string.Empty : Request.Cookies[Page.User.Identity.Name].Value;
if (string.IsNullOrEmpty(name))
{
name = Page.User.Identity.Name;
}
%>
[<%: Html.ActionLink(name, "Profile", "User")%> |
<%: Html.ActionLink("Log out", "LogOut", "User") %> |
<%
}
else
{
%>
[ <%: Html.ActionLink("Log in", "LogIn", "User") %> |
<%
}
%>
和控制器,假设你被带到一个Profile
页面后,你登录(或者你可以设置LogIn
方法中的Response.Cookies
),当你加载模型,你设置cookie中的显示名称:
[Authorize]
[HttpGet]
public ActionResult Profile(User model)
{
if (User.Identity.IsAuthenticated)
{
userRepository.Refresh();
model = userRepository.FetchByOpenID(User.Identity.Name);
// If the user wasn't located in the database
// then add the user to our database of users
if (model == null)
{
model = RegisterNewUser(User.Identity.Name);
}
Response.Cookies[model.OpenID].Value = model.DisplayName;
Response.Cookies[model.OpenID].Expires = DateTime.Now.AddDays(5);
return View(model);
}
else
{
return RedirectToAction("LogIn");
}
}
你可以在我的一个小项目中看到这一切:mydevarmy。我将很快发布一个用户配置文件,您将能够更改显示名称(现在自动生成)。