programing

ASP.Net MVC에서 사용자 개체의 사용자 ID를 가져오려면 어떻게 해야 합니까?

i4 2023. 6. 20. 21:21
반응형

ASP.Net MVC에서 사용자 개체의 사용자 ID를 가져오려면 어떻게 해야 합니까?

고유 식별자가 있는 테이블이 있습니다. 사용자aspnet_Users와 관련된 ID입니다.사용자 ID. 사용자가 해당 테이블에 대한 일부 데이터를 제출하면 컨트롤러 메서드에 [Authorize]가 있기 때문에 사용자 개체가 표시됩니다.User로 사용자 이름을 얻을 수 있습니다.신원.이름입니다. 하지만 사용자 ID가 (소유권) 관계를 설정하려면 어떻게 해야 합니까?

User 개체에서 가져올 수는 없지만 다음과 같은 방법으로 가져올 수 있습니다.

Guid userGuid = (Guid)Membership.GetUser().ProviderUserKey;

솔루션은 다음과 같습니다.

포함:

using Microsoft.AspNet.Identity;

그런 다음 확장 방법을 사용합니다.

User.Identity.GetUserId();

첫째, 이 답변은 엄격하게 MVC 답변이 아니라 ASP.NET 답변입니다.당신의 사이트가 MVC라는 사실은 이 경우 문제를 해결하는 것과 무관합니다.


의 시스템에서 당신의 사용자들을 어떻게 잘 사악한) 을 . ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜasp.net membership provider함께 .net과 함께 박스에서 나옵니다.이것은 당신이 말한 것이 암시하는 것입니다.

  • aspnet_Users.사용자 ID
  • 사용자 ID는 고유 식별자입니다(GUID 참조).

기본 FormsIdentity를 사용하는 기본 양식 인증 시스템의 경우 올바르게 기록한 대로 Name이라는 단일 속성만 가집니다.즉, 고유한 사용자 정보를 저장할 위치에 하나의 값만 있습니다.이 경우 이름/사용자 이름/표시 이름을Name소유물.저는 이 이름이 그들의 표시 이름이고 고유하다고 생각합니다.당신이 여기에 어떤 가치를 두든, 그것은 독특해야 합니다.

이를 통해 사용자의 가이드를 잡을 수 있습니다.

이것 좀 보세요.

using System.Web.Security;

....

// NOTE: This is a static method .. which makes things easier to use.
MembershipUser user = Membership.GetUser(User.Identity.Name);
if (user == null)
{
    throw new InvalidOperationException("User [" + 
        User.Identity.Name + " ] not found.");
}

// Do whatever u want with the unique identifier.
Guid guid = (Guid)user.ProviderUserKey;

따라서 사용자 정보를 가져올 때마다 위의 정적 방법을 사용하여 데이터베이스에서 정보를 가져와야 합니다.

MSDN의 Membership 클래스 및 MembershipUser 클래스에 대한 모든 내용을 읽습니다.

보너스 답변/제안

따라서 데이터베이스를 계속 누를 필요가 없도록 결과를 캐시할 것입니다.

... cont from above....
Guid guid = (Guid)user.ProviderUserKey;

Cache.Add(User.Identity.Name, user.UserID); // Key: Username; Value: Guid.

그렇지 않으면 Identity 클래스(Identity에서 상속됨)를 만들고 다음과 같은 사용자 지정 속성을 추가할 수 있습니다.UserID그런 다음 인증할 때마다(및 모든 요청에 대해) 이 값을 설정할 수 있습니다.어쨌든, 이것은 하드 코어 솔루션이므로, 지금 당장 캐슁을 수행하십시오.

HTH

User.Identity이다.IPrincipal전형적인 유형의System.Web.Security.FormsIdentity

그것은 사용자 ID에 대해 아무것도 모릅니다 - 그것은 단지 '정체성'의 개념의 추상화일 뿐입니다.

II 엔티티 인터페이스에는 사용자에 대한 '이름'만 있고 '사용자 이름'도 없습니다.

MVC4를 기본값으로 사용하는 경우 다음 작업을 수행할 수 있습니다.

WebSecurity.GetUserId(User.Identity.Name)   // User is on ControllerBase

(어디서WebSecuritynuget 패키지에 있습니다.Microsoft.AspNet.WebPages.WebDataWebMatrix에서

사용할 수도 있습니다.

WebSecurity.CurrentUserName
WebSecurity.CurrentUserId

(기존의 더 복잡한 ASPNET 멤버십 시스템인 ASPNetMembershipProvider를 사용하는 경우 @eduncan911의 답변을 참조하십시오.)

ASP.NET Membership을 사용하는 경우(이는 IPprincipal 개체를 사용함):

using System.Web.Security;
{
  MembershipUser user = Membership.GetUser(HttpContext.User.Identity.Name);
  Guid guid = (Guid)user.ProviderUserKey;
}

User.Identity는 로그인 여부와 상관없이 항상 현재 사용자의 상태를 반환합니다.

익명 여부 등그래서 다음에 대한 검사가 로그인됩니다.

if (User.Identity.IsAuthenticated)
{
  ...
}

이 모든 것을 종합하면,

using System.Web.Security;
{
  if (User.Identity.IsAuthenticated)
  {
    MembershipUser user = Membership.GetUser(HttpContext.User.Identity.Name);
    Guid guid = (Guid)user.ProviderUserKey;
  }
}

사용자 ID를 가져오는 최상의 옵션

아래에 참조 추가

using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.Owin.Security;*

public myFunc()
{
   .....
   // Code which will give you user ID is 
   var tmp = User.Identity.GetUserId();

}

권한 부여를 위해 자신의 IP 주체 객체를 사용하는 경우 ID에 액세스하기 위해 캐스트하기만 하면 됩니다.

예:

public class MyCustomUser : IPrincipal
{
    public int UserId {get;set;}

    //...Other IPrincipal stuff
}

다음은 양식 기반 인증을 만드는 방법에 대한 훌륭한 튜토리얼입니다.

http://www.codeproject.com/KB/web-security/AspNetCustomAuth.aspx

이렇게 하면 사용자에 대한 인증 쿠키를 만들고 사용자 정의 사용자 데이터에 액세스할 수 있습니다.

using System.Web.Security;

MembershipUser user = Membership.GetUser(User.Identity.Name); 
int id = Convert.ToInt32(user.ProviderUserKey);

ProviderUserKey 속성입니다.

System.Web.Security.MembershipUser u;
u.ProviderUserKey

단순...

int userID = WebSecurity.CurrentUserId;

일반적으로 그냥 사용할 수 있습니다.WebSecurity.currentUserId그러나 계정이 생성된 직후에 계정 컨트롤러에 있고 사용자 ID를 사용하여 사용자를 다른 테이블의 일부 데이터에 연결하려는 경우WebSecurity.currentUserId(및 위의 모든 솔루션), 유감스럽게도 이 경우 -1이 반환되므로 작동하지 않습니다.

다행히도 이 경우 사용자 프로파일 테이블의 DB 컨텍스트를 사용할 수 있으므로 다음을 통해 사용자 ID를 얻을 수 있습니다.

UserProfile profile = db.UserProfiles.Where(
    u => u.UserName.Equals(model.UserName)
).SingleOrDefault();

저는 최근에 이 사건을 접했고, 이 대답은 저에게 많은 시간을 절약해 줄 것입니다. 그래서 그냥 그것을 밖으로 내놓기만 하면 됩니다.

언급URL : https://stackoverflow.com/questions/924692/how-do-you-get-the-userid-of-a-user-object-in-asp-net-mvc

반응형