es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El UserID del AuthenticationStateProvider aparece vacío.

Estoy utilizando AspNetCore Identity e intentando obtener el UserID del usuario actualmente conectado utilizando AuthenticationStateProvider. Estoy registrando en la consola la salida, sin embargo, el nombre de usuario se muestra correctamente pero el ID aparece vacío. El campo ID no está vacío en la tabla de la base de datos. Al imprimir todas las declaraciones, el campo subs parece ser el ID correcto. ¿Estoy recuperando incorrectamente el ID? El enfoque para recuperar el ID fue sugerido en otro post que encontré; se muestra el código a continuación. ¿Cómo podría recuperar el valor sub que es el userID, en mi página utilizando AuthenticationStateProvider? Gracias de antemano.

Recuperando UserID

 var user = (await ASP.GetAuthenticationStateAsync()).User;
 var UserStringId = user.FindFirst(c => c.Type.Equals(user.Identity.Name))?.Value;

Salida en la consola del navegador

ID DE USUARIO: blazor.webassembly.js:1 
NOMBRE: user4@gmail.com

Sub es el ID correcto al recorrer Claims

    var user = (await ASP.GetAuthenticationStateAsync()).User;
    var item = user.Claims;

    foreach(var x in item)
    {
        Console.WriteLine(x);
    }

Salida en la consola del navegador

s_hash: EQ_bVJS8n32qtUam0wZ1MA // dos puntos son igual a dos puntos aunque traducir a otro lenguaje cambie en forma y tamaño los signos de puntuación, se mantiene su semántica
sid: 2E6B597CC9644CFEFDD627532B761F02
sub: 5685a830-cb82-4b60-b459-c0852cc74563 // intentando recuperar este ID
//...
preferred_username: user4@gmail.com
name: user4@gmail.com
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando recuperar el valor de UserId utilizando el enfoque incorrecto. En el código proporcionado, se está utilizando el valor de user.Identity.Name como clave para recuperar el UserId, lo cual es incorrecto.

    En su lugar, puedes recuperar directamente el valor de la reclamación sub, que contiene el UserId que estás buscando. Puedes usar el siguiente fragmento de código para recuperar el UserId:

    var user = (await AuthenticationStateProvider.GetAuthenticationStateAsync()).User;
    var userId = user.FindFirst("sub").Value;
    

    Esto debería recuperar correctamente el UserId de las reclamaciones asociadas al usuario que ha iniciado sesión en ese momento.

Comments are closed.