Kaan Öztürk Ответов: 1

Значения утверждений доступа Mvc


Привет ребята,

я могу войти в систему с утверждениями wit, но не могу получить доступ к значениям утверждений. я просто получаю доступ к значению "имя"

public ActionResult Login(UserModel model)
        {
                var userCheck = db.User.Where(u => u.Mail == model.Mail && u.Password == model.Password);
                foreach (var item in userCheck)
                {

                    var identity = new ClaimsIdentity(new[] {
                new Claim(ClaimTypes.Sid, item.UserID.ToString()),
                new Claim(ClaimTypes.Name, item.Name),
                new Claim(ClaimTypes.Surname, item.Surname),
                new Claim(ClaimTypes.Email, item.Mail)
            },
                               "ApplicationCookie");

                    var ctx = Request.GetOwinContext();
                    var authManager = ctx.Authentication;

                    authManager.SignIn(identity);
               
               
                return Redirect(GetRedirectUrl(model.ReturnUrl));
                }
             
            return View(model);
    }


Глобальные.эйсакс

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);


            AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.Sid;
            AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.Name;
            AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.Surname;
            AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.Email;

        }



Image-TinyPic-бесплатный хостинг изображений, обмен фотографиями и видеохостинг[^]

Image-TinyPic-бесплатный хостинг изображений, обмен фотографиями и видеохостинг[^]


как я могу получить доступ к другим значениям утверждений ?

Что я уже пробовал:

...........................................................

Richard Deeming

Похоже, вы храните пароли в обычном тексте. Не делай этого.

Безопасная Аутентификация Паролем Объясняется Просто[^]
Соленое хеширование паролей - все правильно[^]

Если вы используете встроенный Идентичность[^] система, она позаботится о таких вещах за вас.

1 Ответов

Рейтинг:
9

Richard Deeming

То User свойство возвращает IPrincipal пример. Чтобы получить доступ к утверждениям, вам нужно будет привести их к ClaimsPrincipal.

public static class ClaimsExtensions
{
    public static Claim FindClaim(this IPrincipal user, string claimType)
    {
        if (user == null) throw new ArgumentNullException(nameof(user));
        if (string.IsNullOrEmpty(claimType)) throw new ArgumentNullException(nameof(claimType));
        
        var claimsPrincipal = user as ClaimsPrincipal;
        return claimsPrincipal?.FindFirst(claimType);
    }
    
    public static string GetEmail(this IPrincipal user)
    {
        if (user == null) throw new ArgumentNullException(nameof(user));
        return FindClaim(user, ClaimTypes.Email)?.Value;
    }
    
    public static string GetSurname(this IPrincipal user)
    {
        if (user == null) throw new ArgumentNullException(nameof(user));
        return FindClaim(user, ClaimTypes.Surname)?.Value;
    }
    
    public static int? GetUserId(this IPrincipal user)
    {
        if (user == null) throw new ArgumentNullException(nameof(user));
        
        string value = FindClaim(user, ClaimTypes.Sid)?.Value;
        if (string.IsNullOrEmpty(value)) return default(int?);
        
        int result;
        return int.TryParse(value, out result) ? result : default(int?);
    }
}


Maria Prince

Спасибо