2

当我从 myopenid 提供程序获得 AuthenticationStatus.Authenticated (DotNetOpenId library) 响应时,我想使用 MVC Redirect(myurl) 将用户从登录页面重定向到另一个页面。但不幸的是,用户没有进入 myurl,而是被重定向到空页面:

myurl?token=AWSe9PSLwx0RnymcW0q....(+ 几千字节的 myopenid 特定查询字符串)

我也尝试了 FormsAuthentication.RedirectFromLoginPage(),但它再次重定向到原始登录页面而不是 myurl。

有人可以建议正确重定向到 myurl 吗?

谢谢

4

2 回答 2

1

首先你应该设置授权cookie:

FormsAuth.SetAuthCookie(UserName, RememberMe);

在此之后,您应该返回 RedirectToAction 结果:

return RedirectToAction(actionName, controllerName);

或重定向结果:

return Redirect(url);

当你使用“return Redirect(url);” 它使用 Response.Redirect(url, false) 方法进行重定向,因此它必须工作。可能是您没有返回此操作结果,请检查此。“FormsAuthentication.RedirectFromLoginPage()”将在您未设置授权 cookie 或您的登录页面是应用程序的主页(默认)页面时重定向到登录页面 -

RedirectFromLoginPage 方法使用 ReturnURL 变量名称重定向到查询字符串中指定的 URL。例如,在 URL http://www.contoso.com/login.aspx?ReturnUrl=caller.aspx中,RedirectFromLoginPage 方法重定向到返回 URL caller.aspx。如果 ReturnURL 变量不存在,RedirectFromLoginPage 方法将重定向到 DefaultUrl 属性中的 URL。

通过 MSDN

于 2009-02-15T10:59:05.443 回答
0

我使用经典的 ReturnUrl 查询字符串参数让用户回到正确的页面。不幸的是,RedirectFromLoginPage 在 OpenId 身份验证后无法正常工作,因此您必须手动进行。请注意,这是作为身份验证模块完成的,而不是在控制器上更深入。这样感觉更干净。

      FormsAuthentication.SetAuthCookie(openid.Response.ClaimedIdentifier, false);
      //FormsAuthentication.RedirectFromLoginPage(openid.Response.ClaimedIdentifier, false); <-- doesn't work
      //send back to the right page
      string returnUrl = ctx.Request.QueryString["ReturnUrl"];
      if (!string.IsNullOrEmpty(returnUrl))
      {
        returnUrl = HttpUtility.UrlDecode(returnUrl);
        ctx.Response.Redirect(returnUrl);
      }

如果您想查看 OpenIdAuthenticationModule 的完整实现,请查看codeplex 上的源代码

于 2009-02-21T23:44:18.313 回答