asp.net - visual - wcf authentication with custom username and password
¿Cómo puedo acceder a UserId en Membresía ASP.NET sin utilizar Membership.GetUser()? (10)
¿Es su razón para guardar una llamada a la base de datos cada vez que necesita UserId? Si es así, cuando uso ASP.NET MembershipProvider, generalmente hago un proveedor personalizado que me permite almacenar en caché esa llamada o un método de utilidad que puedo almacenar en caché.
Si está pensando en ponerlo en el Perfil, no veo muchas razones para hacerlo, especialmente porque también requerirá una llamada a la base de datos y, a menos que esté usando un proveedor de perfil personalizado allí, tiene el procesamiento adicional de Analizando UserId.
Si se pregunta por qué no implementaron un método GetUserId, es simplemente porque no siempre se garantiza que ese ID de usuario será un GUID como en el proveedor incluido.
EDITAR:
Consulte el artículo de ScottGu sobre proveedores que proporciona un enlace para descargar el código fuente real para, por ejemplo, SqlMembershipProvider .
Pero lo más simple es un método GetUserId () en su objeto de usuario, o clase de utilidad, donde obtiene UserId de la memoria caché / sesión, si no, acceda a la base de datos, almacénela por nombre de usuario (o almacene en sesión), y devolverlo.
Para algo más a tener en cuenta (pero tenga mucho cuidado debido a las restricciones de tamaño de las cookies): Formas de autenticación: membresía, roles y perfil sin proveedores y sin sesión
¿Cómo puedo acceder a UserId
en Membresía ASP.NET sin utilizar Membership.GetUser(username)
en ASP.NET Web Application Project?
¿ UserId
puede incluir UserId
en el espacio de nombres de Profile
junto a UserName
( System.Web.Profile.ProfileBase
)?
¿Has probado usar System.Web.HttpContext.Current.User.Identity.Name
? (Asegúrese de verificar que el User
y la Identity
no son nulos primero).
Andrew: Tendría cuidado de hacer una consulta como lo que has mostrado, ya que de manera predeterminada, no hay un índice que coincida con eso, por lo que corres el riesgo de un escaneo completo de la tabla. Además, si está utilizando su base de datos de usuarios para más de una aplicación, no ha incluido la ID de la aplicación.
El índice más cercano es aspnet_Users_Index que requiere ApplicationId y LoweredUserName.
EDITAR:
Vaya, vuelve a leer la publicación de Andrew y no está seleccionando * en la tabla aspnet_Users, sino más bien, una tabla personalizada de perfil / usuario con el nombre de usuario como clave principal.
Decidí escribir la autenticación de usuarios usuarios por mi cuenta (muy simple, pero funciona) y debería hacerlo hace mucho tiempo.
Mi pregunta original era sobre UserId y no está disponible en:
System.Web.HttpContext.Current.User.Identity.Name
Prueba esto:
MembershipUser CurrentUser = Membership.GetUser(User.Identity.Name);
Response.Write("CurrentUser ID :: " + CurrentUser.ProviderUserKey);
Pruebe lo siguiente:
Membership.GetUser().ProviderUserKey
Tienes dos opciones aquí:
1) Use nombre de usuario como la clave principal para su tabla de datos de usuario, es decir:
select * from [dbo.User] where Username = ''andrew.myhre''
2) Agregue ID de usuario al perfil.
Hay pros y contras para cada método. Personalmente, prefiero el primero, porque significa que no necesariamente necesito configurar el proveedor de perfil listo para usar, y prefiero imponer nombres de usuario únicos en mis sistemas de todos modos.
Tuve este problema, la solución está en la configuración web.config, intente configurar web.config con estos:
<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>
public string GetUserID()
{
MembershipUser _User;
string _UserId = "";
_User = Membership.GetUser();
Guid UserId = (Guid)_User.ProviderUserKey;
return _UserId = UserId.ToString();
}
{
MembershipUser m = Membership.GetUser();
Response.Write("ID: " + m.ProviderUserKey.ToString());
}
Le dará el ID de usuario (uniqueidentifier) para el usuario actual de la tabla aspnet_Membership, siempre que haya ingresado con éxito. Si intenta <% =%> o asigna ese valor antes de una autenticación exitosa, obtendrá el error "Referencia del objeto no establecido en una instancia de un objeto ".