MVC和OpenID重定向问题

时间:2008-12-01 23:33:00

标签: asp.net-mvc redirect openid

当我获得AuthenticationStatus.Authenticated时(DotNetOpenId库) 来自myopenid提供商的回复,我想从登录页面重定向用户 使用MVC Redirect(myurl)到另一个。但不幸的是,而不是 进入myurl,用户被重定向到空白页面:

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

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

有人建议适当重定向到myurl吗?

由于

2 个答案:

答案 0 :(得分:1)

首先,您应该设置授权cookie:

FormsAuth.SetAuthCookie(UserName, RememberMe);

之后你应该返回RedirectToAction结果:

return RedirectToAction(actionName, controllerName);

或重定向结果:

return Redirect(url);

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

  

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

Via MSDN

答案 1 :(得分: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的整个实现,请查看source code on codeplex