it-swarm.com.de

Wie kann ich in ASP.NET Membership auf UserId zugreifen, ohne Membership.GetUser () zu verwenden?

Wie kann ich in der ASP.NET-Mitgliedschaft auf UserId zugreifen, ohne Membership.GetUser(username) in ASP.NET Web Application Project zu verwenden?

Kann UserId im Profile-Namespace neben UserName (System.Web.Profile.ProfileBase) enthalten sein?

17
GrZeCh

Ich habe mich dazu entschlossen, die Authentifizierung der Benutzer selbst zu schreiben (sehr einfach, aber es funktioniert) und ich sollte dies schon vor langer Zeit tun.

Meine ursprüngliche Frage betraf UserId und ist nicht verfügbar bei:

System.Web.HttpContext.Current.User.Identity.Name
4
GrZeCh

Versuche dies:

MembershipUser CurrentUser = Membership.GetUser(User.Identity.Name);
Response.Write("CurrentUser ID :: " + CurrentUser.ProviderUserKey);
23
Sandeep Kumar

Ist Ihr Grund dafür, einen Datenbankaufruf jedes Mal zu speichern, wenn Sie die Benutzer-ID benötigen? In diesem Fall verwende ich bei Verwendung des ASP.NET MembershipProviders normalerweise entweder einen benutzerdefinierten Anbieter, mit dem ich diesen Aufruf zwischenspeichern kann, oder eine Dienstprogrammmethode, die ich zwischenspeichern kann.

Wenn Sie darüber nachdenken, es in das Profil aufzunehmen, sehe ich keinen Grund dafür, zumal es auch noch einen Datenbankaufruf erfordert und es die zusätzliche Verarbeitung von gibt, sofern Sie dort keinen benutzerdefinierten Profilanbieter verwenden Auslesen der UserId.

Wenn Sie sich fragen, warum sie keine GetUserId-Methode implementiert haben, können Sie nicht immer sicher sein, dass diese Benutzer-ID eine GUID ist, wie im enthaltenen Anbieter.

BEARBEITEN:

Siehe ScottGus Artikel über Provider , der einen Link zum Herunterladen des tatsächlichen Quellcodes für SqlMembershipProvider enthält.

Am einfachsten ist jedoch eine GetUserId () -Methode in Ihrem Benutzerobjekt oder Ihrer Dienstprogrammklasse, bei der Sie die Benutzer-ID aus dem Cache/der Sitzung abrufen. und gib es zurück.

Für etwas mehr zu beachten (aber wegen der Cookie-Größenbeschränkungen sehr vorsichtig sein): Formularauthentifizierung: Mitgliedschaft, Rollen und Profil ohne Anbieter und ohne Sitzung

13
Ted

Versuche Folgendes:

Membership.GetUser().ProviderUserKey
2
Jun
public string GetUserID()
            {
                MembershipUser _User;
                string _UserId = "";
                _User = Membership.GetUser();
                Guid UserId = (Guid)_User.ProviderUserKey;
                return _UserId = UserId.ToString();
            }
1
HamidSadeghi

Ich hatte dieses Problem, die Lösung befindet sich in der web.config-Konfiguration. Versuchen Sie, die web.config mit den folgenden Elementen zu konfigurieren:

 <roleManager
             enabled="true"
             cacheRolesInCookie="true"
             defaultProvider="QuickStartRoleManagerSqlProvider"
             cookieName=".ASPXROLES"
             cookiePath="/"
             cookieTimeout="30"
             cookieRequireSSL="false"
             cookieSlidingExpiration="true"
             createPersistentCookie="false"
             cookieProtection="All">
  <providers>
    <add name="QuickStartRoleManagerSqlProvider"
        type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
        connectionStringName="ASPNETDB"
        applicationName="SecurityQuickStart"/>
  </providers>
</roleManager>
0
Maysam
{
MembershipUser m = Membership.GetUser();
Response.Write("ID: " + m.ProviderUserKey.ToString());
}

Gibt Ihnen die UserID (Uniqueidentifier) ​​für den aktuellen Benutzer aus der Tabelle aspnet_Membership aus - vorausgesetzt, der aktuelle Benutzer hat sich erfolgreich angemeldet. Wenn Sie versuchen, <% =%> oder diesen Wert vor einer erfolgreichen Authentifizierung zuzuweisen, wird der Fehler "Objektreferenz" angezeigt nicht auf eine Instanz eines Objekts gesetzt ".

http://www.tek-tips.com/viewthread.cfm?qid=1169200&page=1

0

Hier haben Sie zwei Möglichkeiten:

1) Verwenden Sie den Benutzernamen als Primärschlüssel für Ihre Benutzerdatentabelle, d. H .:

select * from [dbo.User] where Username = 'andrew.myhre'

2) Fügen Sie dem Profil eine Benutzer-ID hinzu.

Jede Methode hat Vor- und Nachteile. Persönlich bevorzuge ich den ersten, da ich nicht unbedingt den Standardprofilanbieter einrichten muss und eindeutige Benutzernamen in meinen Systemen sowieso erzwingen möchte.

0
Andrew Myhre

Andrew: Ich würde vorsichtig sein, wenn Sie eine Abfrage durchführen würden, wie sie standardmäßig angezeigt wird. Es gibt keinen Index, der damit übereinstimmt, sodass Sie das Risiko eines vollständigen Tabellenscans eingehen. Wenn Sie Ihre Benutzerdatenbank für mehr als eine Anwendung verwenden, haben Sie außerdem die Anwendungs-ID nicht angegeben.

Der nächstgelegene Index ist aspnet_Users_Index, für den ApplicationId und LoweredUserName erforderlich sind.

BEARBEITEN:

Hoppla! Lesen Sie Andrews Beitrag noch einmal und er führt keine Auswahl * in der Tabelle aspnet_Users durch, sondern eine benutzerdefinierte Profil-/Benutzertabelle, bei der der Benutzername als Primärschlüssel verwendet wird.

0
Ted

Haben Sie versucht, System.Web.HttpContext.Current.User.Identity.Name zu verwenden? (Stellen Sie sicher, dass User und Identity nicht null sind.)

0
technophile