Проблемы перенаправления MVC и OpenID - PullRequest
2 голосов
/ 02 декабря 2008

Когда я получаю AuthenticationStatus.Authenticated (библиотека DotNetOpenId) ответ от поставщика myopenid, я бы хотел перенаправить пользователя со страницы входа к другому, используя MVC Redirect (myurl). Но, к сожалению, вместо добравшись до myurl, пользователь перенаправляется на пустую страницу:

myurl? Token = AWSe9PSLwx0RnymcW0q .... (+ несколько килобайт специфичная для миопенида строка запроса)

Я также пробовал FormsAuthentication.RedirectFromLoginPage (), но он перенаправляет на исходную страницу входа снова вместо myurl.

Кто-нибудь может предложить правильное перенаправление на myurl?

Спасибо

Ответы [ 2 ]

1 голос
/ 15 февраля 2009

Прежде всего вы должны установить авторизационный cookie:

FormsAuth.SetAuthCookie(UserName, RememberMe);

После этого вы должны вернуть результат RedirectToAction:

return RedirectToAction(actionName, controllerName);

Или результат перенаправления:

return Redirect(url);

Когда вы используете «return Redirect (url);» он использует метод Response.Redirect (url, false) для перенаправления, поэтому он должен работать. Может быть, вы не вернули результат этого действия, пожалуйста, проверьте это. «FormsAuthentication.RedirectFromLoginPage ()» будет перенаправлять на страницу входа, если вы не установили файл cookie авторизации или когда ваша страница входа является домашней (по умолчанию) страницей приложения -

Метод RedirectFromLoginPage перенаправляет на URL-адрес, указанный в строке запроса, используя имя переменной ReturnURL. Например, в URL http://www.contoso.com/login.aspx?ReturnUrl=caller.aspx, метод RedirectFromLoginPage перенаправляет на обратный URL caller.aspx. Если переменная ReturnURL не существует, метод RedirectFromLoginPage перенаправляет на URL-адрес в свойстве DefaultUrl.

Через MSDN

0 голосов
/ 22 февраля 2009

Я использую классический параметр строки запроса 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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...