Как зайти в пользовательскую информацию в ASP.NET - PullRequest
1 голос
/ 23 апреля 2019

Я работаю над проектом ASP.NET, и я попытался поймать текущую вошедшую в систему информацию пользователя, такую ​​как адрес электронной почты.Получить этот адрес электронной почты легко, если используется информация о файлах cookie, но я этого не хочу.Потому что это в низкой безопасности.Вот некоторый код, который я попробовал.

                var identity = (ClaimsPrincipal)Thread.CurrentPrincipal;
                string email = identity.Claims.Where(c => c.Type == ClaimTypes.Email)
                               .Select(c => c.Value).SingleOrDefault();
                return Ok(email);

Но я получил НУЛЕВОЙ ответ.Я думаю, что это из-за информации токена и метода (ClaimPrincipal) Thread.CurrentPrincipal.Как я могу получить информацию о текущем пользователе, используя вышеуказанные коды.

Ответы [ 2 ]

3 голосов
/ 24 апреля 2019

Вы должны добавить customized claims после того, как пользователь аутентифицируется, чтобы вы могли использовать его после.

identity.AddClaim(new Claim(ClaimTypes.Email, user.Email));

Вот пример для добавления электронного письма к претензиям.

public ActionResult Login(LoginViewModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        var user = _AccountService.VerifyPassword(model.UserName, model.Password, false);
        if (user != null)
        {
            var identity = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, model.UserName), }, DefaultAuthenticationTypes.ApplicationCookie, ClaimTypes.Name, ClaimTypes.Role);

            identity.AddClaim(new Claim(ClaimTypes.Role, user.Role));
            identity.AddClaim(new Claim(ClaimTypes.GivenName, user.Name));
            identity.AddClaim(new Claim(ClaimTypes.Email, user.Email));

            AuthenticationManager.SignIn(new AuthenticationProperties
            {
                IsPersistent = model.RememberMe
            }, identity);

            return RedirectToAction("Index", "Home");
        }
        else
        {
            ModelState.AddModelError("", "Invalid username or password.");
        }
    }

    return View(model);
}
0 голосов
/ 25 апреля 2019

Если авторизация токена отсутствует, ответ НЕДЕЙСТВИТЕЛЕН. Используя «Авторизацию» в заголовках запросов, я получил адрес электронной почты и имя зарегистрированного пользователя.

Вот несколько кодов для отправки запроса.

    var AuthData = JSON.parse(UserCustomService.getSessionStorage("Token")); //get Token
    var headers = {
        "Content-Type": "application/x-www-form-urlencoded",
        "Accept": "application/x-www-form-urlencoded",
        "cache-control": "no-cache",
        "Authorization": "Bearer " + AuthData.access_token, // Bearer:type of Token
    };

    var GetUserInformation = function () {

        var config = {
            "async": true,
            "crossDomain": true,
            "url": ApiBaseUrl + "/GetUserInformation", // user defined route
            "method": "GET",
            "headers": headers
        };

        $.ajax(config).done(function (response) {
            if (response) {
                return ShowUserInformation(response);
            } else return null;
        });
    }
    var ShowUserInformation = function (response) {
        $scope.User_EmailAddress = response.EmailAddress;
        $scope.User_FirstName = response.FirstName;
        $scope.User_LastName = response.LastName;
    }

Токен должен быть во всех заголовках запросов для получения и обновления информации о текущем пользователе в базе данных из соображений безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...