【问题标题】:Sharing data between Actions and application behavior在 Action 和应用程序行为之间共享数据
【发布时间】:2010-07-23 11:14:56
【问题描述】:

这是我的应用程序当前的用户注册工作流程。

  1. 注册表单(GET /register)
  2. 提交表单(POST /register)
  3. 成功后,重定向路由到“/registerSuccess”
  4. 在 (GET /registerSuccess ) 视图中,我想显示类似“用户名已成功注册”的消息。

控制器动作:

public ActionResult Register()
{
    return View();
}

[HttpPost]
public ActionResult Register(string name, string password, string confirmPassword)
{
    TempData["registered_user"] = name;
    return RedirectToRoute("RegisterSuccess");
}

public ActionResult RegisterSuccess()
{
    return View();
}

注册成功视图

<h2><%: TempData["registered_user"] %> has been registered successfully.</h2>

除了用户刷新页面时用户名为空(GET /registerSuccess)之外一切正常。

在其他应用程序中是否正常?还是我应该对此做些什么? :) (这是我最喜欢的项目,需求来自我:P)

更新:其实还有一步就是注册用户需要管理员的批准。所以,我不能让用户在注册成功后登录。我目前正在使用基于 cookie 的 FormsAuthentication 来跟踪登录用户。

我更喜欢使用PRG 模式,而不是在提交表单中显示 Flash 消息。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-2


    【解决方案1】:

    这是正常行为..当用户“刷新”页面时直接请求页面,而不是通过您的注册功能,因此注册用户键到那时就消失了。当您进行初始注册时,您应该使用会话标记(例如 cookie)来跟踪成功登录的用户。

    Using cookies tutorial 是一个很好的起点

    如果您要使用 HTTP 身份验证(例如基本身份验证),那么浏览器会在发送 401 Unauthorized 的每个请求中提交用户名和密码(基本身份验证为明文)(请参阅HTTP/1.0 Protocol

    【讨论】:

      【解决方案2】:

      嗯……

      通常您应该考虑一个 SSO 解决方案,它保存您的用户身份验证(令牌)。 那么您只需要显示当前经过身份验证的用户(因为完成的注册通常会登录用户)

      其他解决方案是,在 url 中添加用户,以便成功页面具有所有参数。

      /registerSuccess/<username>
      

      (也许检查一下,登录的用户刚刚注册,并且是相同的)

      对于您自己的有趣项目,我会做第二个。很简单。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-05
        • 2019-03-29
        • 2014-11-03
        • 2018-11-14
        • 1970-01-01
        • 1970-01-01
        • 2016-10-04
        相关资源
        最近更新 更多