2011-04-20 3 views
1

OpenId를 사용하여 사이트의 현재 사용자를 추적하는 데 권장되는 솔루션은 무엇입니까? ID 및 주장 된 식별자를 가진 Users 테이블이 있고 내 사이트 특정 정보가 있고 사용자가 사이트 특정 정보를 업데이트하려고한다고 가정 해보십시오. 내장 멤버십을 사용하지 않는다는 것을 고려하면 현재 사용자를 추적하는 가장 좋은 방법은 무엇입니까? 사용자가 프로필을 업데이트하려고 할 때마다 openid에 요청을 보내어 ClaimedIdentifier를 가져와야합니까? 또는 UserName을 고유하게 적용하고 User.Identity.Name을 기반으로 사용자 정보를 얻으시겠습니까?OpenId 업데이트 프로필 정보

답변

1

나는 쿠키와 함께 할 :) ... 당신이 유용 내 대답을 찾을 수 있습니다 : 내 예에서 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; } 
} 

: What OpenID solution is really used by Stack Overflow?

나는 또한에 대한 간단한 블로그 게시물을했습니다 나는 오픈 ID로 로그인 나는 쿠키에 저장,하지만 당신은 사용자 이름으로, 쿠키에 다른 정보를 저장할 수 있습니다 :

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 :
이 같은 (이보기이다)에 대해 어떻게 : 당신이 로그인 (또는 당신이 Response.Cookies을 설정할 수 있습니다 후

<% 
    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 방법) 때 당신은 쿠키에 표시 이름을 설정합니다 mydevarmy :

[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"); 
     } 
    } 

당신은 내가 가진 작은 프로젝트에 대한 조치에서 모두 볼 수 있습니다. 곧 사용자 프로필을 게시하고 표시 이름을 변경할 수 있습니다 (현재 자동으로 생성 됨).

+0

동의. ASP.NET 멤버쉽을 사용하지 않더라도 FormsAuthentication 로그인 쿠키를 사용하여 로그인 한 사용자를 기억할 수 있고 사용할 수 있습니다. –

+0

@Andrew, THE MAN 본인으로부터! 내가 옳은 일을하고있는 것처럼 느껴진다.) ... 어쨌든, 우리에게 DotNetOpenAuth를 주셔서 감사합니다. 그것은 내 인생을 훨씬 더 쉽게 만들어주고 그 대가로 모든 곳에서 구현하고 있습니다! – Kiril

+0

@Lirik, 멋지다, 이것은 내가 갖고있는 것과 매우 흡사하기 때문에 나는 바른 길로 가고 있다고 생각한다. 그의 프로필 정보를 업데이트하려고 할 때 현재 사용자를 얻는 방법에 대해 조금 꼼짝도하지 않습니다. 쿠키를 설정하는 데 사용하는 이름은 친숙한 이름이므로 친숙한 이름을 가진 사용자가 둘 이상있을 수 없습니까? 또는 요청 된 ID를 사용합니까? 그렇다면 세션 상태를 사용하여 친숙한 이름으로 가야합니까? –

관련 문제