web-dev-qa-db-fra.com

Ajouter des types de revendications personnalisés

Nouveau dans l'authentification OWIN et j'ai du mal à créer mes propres types de revendications owin.

Voici la chose. J'ai besoin d'ajouter des revendications personnalisées comme "GroupID" pour pouvoir y accéder facilement sur les différentes pages.

J'ai fait quelque chose comme ça dans ma connexion

public ActionResult Login(LoginViewModel model, string returnUrl)
{
    UserViewModel userModel = new UserViewModel();
    if (!ModelState.IsValid)
    {
        return View(model);
    }

    if(CommonHelper.ValidateADUser(model.Username,model.Password))
    {

        UserViewModel curUser = userModel.GetUserDetails(model.Username);
        if (curUser != null)
        {
            var claims = new List<Claim>();
            claims.Add(new Claim(ClaimTypes.WindowsAccountName, curUser.Username));
            claims.Add(new Claim(ClaimTypes.Name,curUser.Fullname));
            claims.Add(new Claim(ClaimTypes.Role, ""));
            claims.Add(new Claim("GroupID", curUser.UserGroupID.ToString()));

            var id = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);
            var ctx = Request.GetOwinContext();
            AuthenticationManager.SignIn(id);
            return RedirectToAction("Index", "Home");
        }
    }
    else
    {
        ModelState.AddModelError("", "Invalid login attempt.");
    }

    return View(model);
}

Dans ma connexion partielle, j'ai essayé d'obtenir la valeur en faisant cela

public ActionResult _LoginPartial()
{
    var identity = (ClaimsIdentity)User.Identity;
    TempData["curUserFullName"] = identity.FindFirst(ClaimTypes.Name).Value;

    string s= identity.FindFirst("GroupID").Value;
    return PartialView();
}

Je peux obtenir le nom d'utilisateur et le nom complet sans problème, mais l'ID de groupe provoque une erreur nulle d'objet.

En espérant que quelqu'un puisse me pousser à la bonne réponse.

27
TheProvost

Comme j'ai vérifié votre code, il n'y a aucun problème.

Voici ce que je veux que vous fassiez:

Vérifiez si le cache était vide. Si votre cache n'a pas été effacé, vous pouvez l'effacer comme ceci: CTRL + SHIFT + DELETE

C'est parce que lors de votre connexion, il enregistrera dans les cookies et ce n'était pas clair, et il arrive que la nouvelle réclamation n'ait pas été enregistrée dans les cookies.

Ou essayez de vérifier si votre serGroupID a une valeur.

21
kwingkwingko