在使用OpenId的網站中跟蹤當前用戶的建議解決方案是什麼?假設我有一個用戶表,其中包含一個ID和一個聲明的標識符,然後是我的網站特定信息,用戶希望更新他們的網站特定信息。跟蹤當前用戶的最佳方式是什麼,因爲我沒有使用內置成員資格?每當用戶嘗試更新他們的個人資料時,我是否應該向openid發送一個請求以獲取ClaimedIdentifier?或者,也許只是強制UserName是唯一的,並獲取基於User.Identity.Name的用戶信息?OpenId更新配置文件信息
1
A
回答
1
我用一個cookie做到這一點:)......你可能會發現我的回答有用:What OpenID solution is really used by Stack Overflow?
我也做了一個簡單的博客文章吧: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") %> |
<%
}
%>
和控制器,想必你您登錄(或者你可以設置Response.Cookies
後帶到Profile
頁在LogIn
法),當你加載了你的模型在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。我將很快發佈用戶配置文件,您將可以更改顯示名稱(目前會自動生成)。
相關問題
- 1. 更新用戶配置文件詳細信息到MySQL
- 2. 如果我使用OpenID登錄,我可以訪問配置文件信息嗎?
- 3. 使用簡單的文本框更新用戶配置文件信息
- 4. 加密配置文件信息
- 5. 從文件中讀取配置信息
- 6. 如何分離配置文件信息
- 7. 散列/加密配置文件信息
- 8. 更新配置文件
- 9. 更新配置文件
- 10. 更新二進制文件信息
- 11. github上更新文件信息
- 12. 從Wordpress配置文件中刪除「更多信息」字段
- 13. ASP.NET - 更改pagemethod中的配置文件信息?
- 14. 如何使用Facebook Api動態更新用戶配置文件信息?
- 15. 使用自定義配置文件信息更新用戶元數據
- 16. 如何更新Authorize.NET(CIM)中的客戶付款配置文件詳細信息?
- 17. 更新/刷新配置文件
- 18. 關於vimrc配置的更多信息
- 19. PCL中的路徑,文件信息等(配置文件158)
- 20. 更新mysql和設置信息塊
- 21. 重新配置BindingProvider for openID connect
- 22. CAS 3.5.2 OpenID配置
- 23. Passport-OpenID Connect配置
- 24. 使用google oauth2配置文件信息設置$ _SERVER php變量
- 25. kubernetes更新容器配置文件
- 26. 廚師更新配置文件
- 27. 我的配置文件沒有更新
- 28. 的WinForms - 引用更新配置文件
- 29. iPhone配置文件更新幫助
- 30. 在c中更新配置文件#
同意。儘管沒有使用ASP.NET Membership,但您仍然可以使用FormsAuthentication登錄cookie來記住哪個用戶登錄。 – 2011-04-20 13:41:35
@Andrew,來自THE MAN自己!我覺得我正在做的事情正確:))無論如何,感謝給我們DotNetOpenAuth:它使我的生活更容易,作爲回報,我在我去的任何地方實施它! – Kiril 2011-04-20 14:18:51
@Lirik,很酷,這與我所擁有的非常相似,所以我認爲我在正確的軌道上。當我嘗試更新他的個人資料信息時,我有點卡住了,但是如何獲得當前用戶。你用來設置cookie的名字是一個友好的名字,所以不能有多個用戶使用這個友好的名字?或者您是否使用了聲明的ID,如果是,您是否必須使用會話狀態才能使用友好名稱? – 2011-04-20 19:09:33