使用UserID注册后重定向

时间:2013-08-22 20:55:21

标签: asp.net-mvc entity-framework simplemembership

首先使用VS'12 asp.net MVC4 C#InternetApplication与KendoUI和Simplemembership EF Code。

这就是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控制器,并将其发送给新创建的用户的ID。

获取我尝试过的ID

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”,userID);

  2. 我也试过return RedirectToAction("Edit","ChangeUsersInfo");看看它是否会让我在没有变量的情况下发送它。

  3. 出于某种原因

    1. 变量返回= Null
    2. 变量返回= Null
    3. 不起作用,因为1和2没有
    4. 似乎没有重定向到新的EDIT,而是重定向到LOG IN屏幕
    5. 我的空值和失败重定向背后的原因是什么?

      是数据库有用户

1 个答案:

答案 0 :(得分:1)

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

使用WebSecurity和System.Web.Security项目仅适用于后续请求,因为您尚未将auth cookie发送回客户端(这是从中提取数据的地方)。鉴于此,您甚至不必在重定向URL中发送用户的用户ID ...他们已登录,您可以在控制器/操作中获取它。通过从auth票证中获取userId,您现在无需检查URL中传递的用户ID是否实际上是当前登录的用户。

示例:

登录方式

    [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");
        }...
    }

更改用户信息控制器

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