none
аутентификация mvc RRS feed

  • Вопрос

  • Здравствуйте.

    У меня вопрос. Мне надо  аутентифицировать юзера после регистрации.. Делаю так

    Membership.CreateUser(model.UserName, model.Password, null, null, null, true, null, out createStatus);
                              FormsAuthentication.SetAuthCookie(model.UserName, true);

    У меня после SetAuthCookie значения пропертей Request.IsAuthentificated  и User.Identity.IsAuthentificated  остаются false... Когда загрузится страница, и я сделаю где-то пост, то в екшене етого поста Request.IsAuthentificated  и User.Identity.IsAuthentificated уже true. На форумах написано что SetAuthCookie должно сразу ставить Request.IsAuthentificated в true... Видно я что-то не так делаю?

    Аналогичная ситуация и с FormsAuthentication.SignOut(). сразу в false Request.IsAuthentificated не ставит.

    Спасибо.

    4 декабря 2013 г. 10:12

Ответы

  • "Может в єтом причина?" - не не в этом причина. Механизм аутентификации не зависит от поставщика членства. После установки куки аутентификации вам надо сделать редирект на другую страницу (ту которую запросил пользователь или страницу по умолчанию), я забыл сосвем, что вы его не делаете.

    Сделаем содержимое сообщества лучше, вместе!

    • Помечено в качестве ответа zmiy1982 5 декабря 2013 г. 8:02
    5 декабря 2013 г. 5:42
    Модератор

Все ответы

  • А метод SetAuthCookie у вас точно вызывается? И правильно ли настроен web.config.

    <system.web>
    <authentication mode="Forms">
      <forms loginUrl="~/LoginUrl" />
    </authentication>
    </system.web>


    Сделаем содержимое сообщества лучше, вместе!

    4 декабря 2013 г. 12:06
    Модератор
  • Да все так и есть, как надо. Забыл сказать, я использую свой собственный провайдер, наследника MembershipProvider. В переопределенном CreateUser  я просто создаю и возвращаю MembersipUser:

            public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
            {
    
                status = MembershipCreateStatus.UserRejected;
    
    .....
    
                MembershipUser msUser = new MembershipUser("CustomMembershipProvider",//providerName
                                                               username,
                                                               0,  //providerUserKey
                                                               string.Empty, //email
                                                               string.Empty, //passwordQuestion,
                                                               string.Empty, //comment,
                                                               true, //isApproved
                                                               false, //isLockedout
                                                               DateTime.Now,//CreationDate
                                                               DateTime.Now, //LastLoginDate,
                                                               DateTime.Now, //LastActivityDate,
                                                               DateTime.Now, //LastPasswordChangedDate,
                                                               DateTime.Now //LastLockedOutDate
                                                               );
    
    ...
    
                return msUser;
            }

    Может в єтом причина? Я делал єто по примеру реализации кастомного провайдера, (есть на многих форумах), вроде сделал все как написано...

    Но с другой стороны, у меня ведь потом Request.IsAuthentificated  возвращает true когда я пост страницы сделаю, тоесь как бы  аутентификация проходит, но не сразу после вызова SetAuthCookie ...

    4 декабря 2013 г. 14:55
  • "Может в єтом причина?" - не не в этом причина. Механизм аутентификации не зависит от поставщика членства. После установки куки аутентификации вам надо сделать редирект на другую страницу (ту которую запросил пользователь или страницу по умолчанию), я забыл сосвем, что вы его не делаете.

    Сделаем содержимое сообщества лучше, вместе!

    • Помечено в качестве ответа zmiy1982 5 декабря 2013 г. 8:02
    5 декабря 2013 г. 5:42
    Модератор
  • Ух, ты, спасибо Вам большое, действительно работает...

    А почему с return RedirectToAction("GetUserMainView", new{userId = userid}) работает аутентификация    а когда я делал return View("UserMain", model) - то нет?

    Спасибо.

    5 декабря 2013 г. 8:08
  • Потому, что во втором случае перенаправления нет. Полноценный редирект - это когда браузер запрашивает заново страницу на ответ сервера.

    Сделаем содержимое сообщества лучше, вместе!

    5 декабря 2013 г. 8:21
    Модератор