Я реализовал пользовательскую аутентификацию, но как получить UserID через приложение - PullRequest
0 голосов
/ 30 августа 2011

Я реализовал пользовательскую аутентификацию / авторизацию на основе этого урока http://www.mattwrock.com/post/2009/10/14/Implementing-custom-Membership-Provider-and-Role-Provider-for-Authinticating-ASPNET-MVC-Applications.aspx Работает нормально.Я реализовал это потому, что не хочу, чтобы в моей базе данных были хранимые процедуры и возможность использовать разные СУБД.Но у меня есть одна проблема здесь.Я аутентифицирую пользователя, но не знаю, как где-то хранить UserId, поэтому, когда мне нужно получить что-то из базы данных на основе UserID, чтобы получить это.Что-то вроде:

List<Product> products = productsRepository.GetProductsByUserId(User.UserID);

Как это сделать?

Кстати, есть ли лучший способ сделать пользовательскую аутентификацию / авторизацию, чем этот, из этого урока?

Спасибо

Ответы [ 3 ]

3 голосов
/ 30 августа 2011

Если вы на самом деле реализовали все методы и заполняете встроенный MembershipUser, тогда просто Membership.GetUser().ProviderUserKey вернет идентификатор пользователя.

0 голосов
/ 30 августа 2011

Если вы используете FormsAuthentification, вы можете закодировать некоторые пользовательские данные в вашем cookie / билете помимо UserName.Но вы должны вручную создать FormsAuthenticationTicket и установить для свойства UserData идентификатор пользователя во время входа в систему.Таким образом, вы можете иметь как UserName & UserId.

        // during login
        var authCookie = FormsAuthentication.GetAuthCookie(userName, createPersistentCookie);
        var ticket = FormsAuthentication.Decrypt(authCookie.Value);
        // preserve data in your configuration
        var ticketWithId = new FormsAuthenticationTicket(
                                version: ticket.Version,
                                name: ticket.Name,
                                issueDate: ticket.IssueDate,
                                expiration: ticket.Expiration,
                                isPersistent: ticket.IsPersistent,
                                userData: userId);

        authCookie.Value = FormsAuthentication.Encrypt(ticketWithId);
        _context.Response.Cookies.Add(authCookie);

Тогда вы можете иметь метод расширения для классов Controller или HttpContext:

    public int? GetUserId(this Controller controller) {
        var identity = (FormsIdentity)controller.User.Identity;
        int id;
        if (int.TryParse(identity.Ticket.UserData, out id))
            return id;
        return null;
    }

Но если вам не нужны оба UserId& Данные UserName для вашего пользователя, чем HttpContext.User.Identity.Name или Controller.User.Identity.Name будет иметь имя пользователя для вашего текущего пользователя

0 голосов
/ 30 августа 2011

в моем решении я использую

 Docent docent = DocentRepo.GetByID(User.Identity.Name);

может быть, это вам пригодится

...