Какое рекомендуемое решение для отслеживания текущего пользователя на сайте с помощью OpenId? Скажем, у меня есть таблица Users с идентификатором и заявленным идентификатором, а затем информация о моем сайте, и пользователь хочет обновить информацию о своем сайте. Как лучше всего отслеживать текущего пользователя, учитывая, что я не использую встроенное членство? Должен ли я отправлять запрос openid для получения ClaimedIdentifier каждый раз, когда пользователь пытается обновить свой профиль? Или, возможно, просто сделайте UserName уникальным и получите информацию о пользователе на основе User.Identity.Name?
Информация о профиле обновления OpenId
Ответы (1)
Я делаю это с помощью файла cookie :) ... мой ответ может оказаться полезным: Какое решение OpenID действительно использует 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") %> |
<%
}
%>
И Контроллер, предположительно, вы попадаете на страницу Profile
после входа в систему (или вы можете установить Response.Cookies
в методе 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. Я собираюсь опубликовать профиль пользователя в ближайшее время, и вы сможете изменить отображаемое имя (которое на данный момент создается автоматически).
UserID
вместо UserName
). Если вам нужно найти UserName
, вы можете найти его в своей базе данных по UserID
.
- person Kiril; 20.04.2011