当我获得AuthenticationStatus.Authenticated时(DotNetOpenId库) 来自myopenid提供商的回复,我想从登录页面重定向用户 使用MVC Redirect(myurl)到另一个。但不幸的是,而不是 进入myurl,用户被重定向到空白页面:
myurl?token = AWSe9PSLwx0RnymcW0q ....(+几千字节的 myopenid特定的查询字符串)
我也尝试过FormsAuthentication.RedirectFromLoginPage(),但它重定向 到原始登录页面而不是myurl。
有人建议适当重定向到myurl吗?
由于
答案 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。
答案 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。