2008-12-01 6 views
2

Quand je reçois AuthenticationStatus.Authenticated (bibliothèque DotNetOpenId) réponse du fournisseur de MyOpenID, je voudrais rediriger l'utilisateur de la page de connexion à un autre en utilisant MVC Redirect (myurl). Mais malheureusement, au lieu de se rendre à myurl, l'utilisateur est redirigé vers la page vide:MVC et OpenID Redirection Problèmes

myurl jeton = AWSe9PSLwx0RnymcW0q .... (+ plusieurs kilo-octets de chaîne de requête spécifique à MyOpenID)

J'ai aussi essayé FormsAuthentication .RedirectFromLoginPage(), mais il redirige vers la page de connexion d'origine à nouveau au lieu du myurl.

Quelqu'un pourrait-il suggérer une redirection appropriée vers myurl?

Merci

Répondre

1

d'abord tout ce que vous devez définir cookie autorisation:

FormsAuth.SetAuthCookie(UserName, RememberMe); 

Après cela, vous devez revenir résultat RedirectToAction:

return RedirectToAction(actionName, controllerName); 

Ou Rediriger résultat:

return Redirect(url); 

Lorsque vous utilisez "return Redirect (url);" il utilise la méthode Response.Redirect (url, false) pour la redirection, il doit donc fonctionner. Peut-être ne renvoyez-vous pas ce résultat d'action, veuillez vérifier ceci. « FormsAuthentication.RedirectFromLoginPage() » seront redirigés vers la page de connexion lorsque vous ne définissez pas cookie autorisation ou lorsque votre page de connexion est une page de l'application maison (par défaut) -

La méthode RedirectFromLoginPage redirige vers l'URL spécifié dans la chaîne de requête en utilisant le nom de la variable ReturnURL. Par exemple, dans l'URL http://www.contoso.com/login.aspx?ReturnUrl=caller.aspx, la méthode RedirectFromLoginPage redirige vers l'URL de renvoi caller.aspx. Si la variable ReturnURL n'existe pas, la méthode RedirectFromLoginPage redirige vers l'URL dans la propriété DefaultUrl.

Via MSDN

0

J'utilise le paramètre querystring ReturnUrl classique pour obtenir l'utilisateur à la bonne page. Malheureusement, la RedirectFromLoginPage ne fonctionne pas bien après l'authentification OpenId, vous devez donc le faire manuellement. Notez que ceci est fait comme un module d'authentification plutôt que plus profond sur le contrôleur. On se sent plus propre de cette façon.

 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); 
     } 

Si vous souhaitez voir la mise en œuvre complète de la OpenIdAuthenticationModule, consultez le source code on codeplex.