Frage

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

Kann in UserId Namespace enthalten Profile werden neben UserName (System.Web.Profile.ProfileBase)?

War es hilfreich?

Lösung 3

habe ich beschlossen, die Authentifizierung von Benutzern Benutzer auf meine eigene zu schreiben (sehr einfach, aber es funktioniert) und ich sollte das schon vor langer Zeit getan.

war meine ursprüngliche Frage über Benutzer-ID und es ist nicht verfügbar aus:

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

Andere Tipps

Versuchen Sie folgendes:

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

Ist Ihr Grund für diese eine Datenbank Aufruf jedes Mal wenn Sie die Benutzer-ID speichern müssen? Wenn ja, wenn ich die ASP.NET MembershipProvider bin mit, ich entweder in der Regel einen speziellen Provider tun, die mich auf diesen Ruf cachen erlaubt, oder ein Dienstprogramm Methode, die ich zwischenspeichern kann.

Wenn Sie denken an sie im Profil setzen, ich sehe nicht viel Grund dafür, zumal es auch noch eine Datenbank Aufruf benötigen und wenn Sie ein eigenes Profil wie Anbieter verwenden, hat es die hinzugefügt Verarbeitung der UserId Parsen aus.

Wenn Sie sich fragen, warum sie nicht ein GetUserID Verfahren umgesetzt hat, ist es einfach, weil Sie nicht immer gewährleistet, dass das Benutzer-ID eine GUID als in dem im Lieferumfang enthaltenen Provider sein wird.

EDIT:

Siehe ScottGu Artikel über Anbieter die eine bietet Link, um den eigentlichen Quellcode auf dem Herunterladen für das heißt SqlMembershipProvider .

Aber die einfachste Sache wirklich zu tun, ist ein GetUserID () -Methode in Ihrem Benutzerobjekt oder Utility-Klasse, in dem Sie den Benutzer-ID aus dem Cache / Session erhalten, wenn es traf sonst die Datenbank-Cache es nach Usernamen (oder Speicher in Sitzung), und senden sie es.

Für etwas mehr zu betrachten (aber sehr vorsichtig sein, da die Cookie-Größenbeschränkungen): Forms Auth: Mitgliedschaft, Rollen und Profile ohne Provider und keine Session

Versuchen Sie Folgendes:

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

Sie haben zwei Möglichkeiten:

1) Verwenden Sie Benutzernamen als Primärschlüssel für Ihre Benutzerdatentabelle das heißt:

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

2) Fügen Sie Benutzer-ID an das Profil.

Es gibt Vor-und Nachteile jeder Methode. Persönlich bevorzuge ich die erste, weil es bedeutet, dass ich nicht unbedingt die out-of-the-Box-Profil-Provider einzurichten, und ich ziehe ohnehin eindeutige Benutzernamen in meinen Systemen zu erzwingen.

Andrew: Ich wie eine Abfrage zu tun vorsichtig sein würde, was Sie als standardmäßig angezeigt haben, gibt es keinen Index, der mit dem übereinstimmt, so dass Sie das Risiko eines vollständigen Tabellenscan ausgeführt werden. Außerdem, wenn Sie Ihre Benutzer-Datenbank für mehr als eine Anwendung verwenden, haben Sie nicht den Anwendungs-ID enthalten.

Der nächste Index ist aspnet_Users_Index die die ApplicationId und LoweredUserName erfordert.

EDIT:

Oops - nachzulesen Andreas Post und er ist kein select * auf der aspnet_Users Tabelle zu tun, sondern vielmehr eine eigene Profil / Benutzertabelle der Benutzername als Primärschlüssel mit

.

Ich hatte dieses Problem, die Lösung in der web.config-Konfiguration ist, versuchen web.config mit dieser Konfiguration:

 <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>
{
MembershipUser m = Membership.GetUser();
Response.Write("ID: " + m.ProviderUserKey.ToString());
}

geben Sie die Benutzer-ID (unique) für den aktuellen Benutzer aus der aspnet_Membership Tabelle -. Die aktuelle Bereitstellung erfolgreich angemeldet Wenn Sie versuchen <% =%> oder diesen Wert vor einer erfolgreichen Authentifizierung weisen Sie den Fehler erhalten "Der Objektverweis wurde nicht auf eine Instanz eines Objekts festgelegt".

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

Haben Sie versucht System.Web.HttpContext.Current.User.Identity.Name mit? (Stellen Sie sicher, dass User zu überprüfen und Identity sind nicht-null zuerst.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top