2013-08-22 7 views
1

с использованием VS'12 asp.net MVC4 C# InternetApplication с кодом KendoUI и Simplemembership EF.Перенаправление после регистрации с использованием UserID

Это то, что VS дает вам возможность начать с.

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public ActionResult Register(RegisterModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      // Attempt to register the user 
      try 
      { 
       WebSecurity.CreateUserAndAccount(model.UserName, model.Password); 
       WebSecurity.Login(model.UserName, model.Password); 
       return RedirectToAction("Index", "Home"); 
. 
. 
. 

Вот где я хотел бы, чтобы RedirectToAction на мой контроллер ChangeUsersInfo контроллер, и отправить его идентификатор вновь созданного пользователя.

Чтобы получить идентификатор я попытался

1.

   var UserID = (from u in db.UserProfiles 
          where u.UserName == User.Identity.Name 
          select new 
          { 
           UserID = u.UserID 
          }).Single(); 

2.

var userID = System.Web.Security.Membership.GetUser().ProviderUserKey; 
  1. возвращение RedirectToAction ("Edit", "ChangeUsersInfo", идентификатор пользователя);

  2. Я также пробовал return RedirectToAction("Edit","ChangeUsersInfo");, чтобы посмотреть, не даст ли мне jsut отправить его туда без переменной.

почему

  1. переменная возвращается = Null
  2. переменная возвращенной = Null
  3. не работает, потому что 1 и 2 техника его подводит
  4. , кажется, не перенаправлять на новый EDIT но LOG IN Экран

В чем причина моих нулей и отказа от перенаправления?

Да база данных пользователей

ответ

1
var userID = System.Web.Security.Membership.GetUser().ProviderUserKey; 

Использование WebSecurity и System.Web.Security элементы будут работать только на последующий запрос, потому что вы не послали аутентификации куки обратно клиенту еще (это где он извлекает свои данные). Учитывая это, вам даже не нужно отправлять идентификатор пользователя в URL-адрес переадресации ... они вошли в систему, и вы можете просто получить его на контроллере/действии, которое вы собираетесь делать. Перехватив идента от билета AUTH, теперь вы не должны проверить, если пользователь Id передается в URL на самом деле пользователь, который в настоящее время вошли в систему

Пример:.

Войти Method

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public ActionResult Register(RegisterModel model) 
    { 
     if (!ModelState.IsValid) 
     { 
      //send em back with the errors 
      Return View(); 
     } 
     try 
     { 
      WebSecurity.CreateUserAndAccount(model.UserName, model.Password); 
      WebSecurity.Login(model.UserName, model.Password); 
      return RedirectToAction("Index", "ChangeUsersInfo"); 
     }... 
    } 

Change User Info Controller

[Authorize] 
public ActionResult Index() 
{ 
    var userId = WebSecurity.CurrentUserId; 
    var model = GetUserInfoService.GetUserInfo(userId); 
    Return View(model); 
} 
+0

'возвращение RedirectToAction ("Index",«Ch angeUsersInfo ");' все равно не перенаправит меня на мое действие/контроллер, он даже не ударит мои точки останова, любые другие идеи? - Кроме того, большое спасибо за информацию с cookie и Websecurity, очень полезную до сих пор. –

+0

Кроме того, он регистрирует нового зарегистрированного пользователя, но оставляет его на экране входа в систему (в котором действительно странно sicne есть 0 Redirects - другое, чем мое) –

+0

Вы использовали метод, я h ad вонючий улов, позволяющий администратору отредактируйте раздел контроллера. Его работа теперь так благодарит! –

Смежные вопросы