2013-05-06 2 views
0

В соответствии с этим question существует способ изменить URL-адрес переадресации для служб авторизации ServiceStack.Переадресация ServiceStack при наследовании от ServiceStackController

Однако, наследуя мои контроллеры от ServiceStackController<AuthUserService>, это явно не работает, потому что ServiceStackController жестко кодирует URL-адрес перенаправления и меняет его на AuthFeature, регистрация на него не влияет.

Мои вопросы:

1), что правильный способ обойти эту проблему?

Есть возможность переопределить LoginRedirectUrl, не так ли? В чем смысл атрибута атрибута Authenticate: HtmlRedirect или AuthFeature?

2) И в чем цель ServiceStackController вообще?

3) Я поставил [Authenticate] на моем регуляторе и атрибут [Authenticate], кажется, игнорирует атрибут [AllowAnonymous], что я ставлю на Login действия контроллера счета.

Я знаю, что эти два полностью разделены и [AllowAnonymous], исходящие из System.Web, но есть ли атрибут «allow» в ServiceStack?

ответ

2

Я предполагаю, что вы используете ServcieStack вместе с приложением ASP.NET MVC ...

1), что правильный способ обойти эту проблему?

В моем MVC-контроллере, который наследуется от ServiceStackController, я добавил это для обработки перенаправления.

public override ActionResult AuthenticationErrorResult 
{ 
    get 
    { 
     if (this.AuthSession == null || this.AuthSession.IsAuthenticated == false) 
     { 
      return Redirect("~/Home/Login"); 
     } 
     return base.AuthenticationErrorResult; 
    } 
} 

Какой смысл собственности HtmlRedirect атрибута AUTHENTICATE в или AuthFeature один
Я довольно уверен, что HtmlRedirect работает, как ожидалось, когда он не делает запросы к контроллерам MVC (то есть. Вызова/API/Foo, Предполагая, что пользовательский путь ServiceStack равен '/ api'). Я думаю, что есть некоторые проблемы с MVC 'hijacking the return'.

2) И в чем цель ServiceStackController вообще?
Я понимаю, что это главная цель заключается в share Session data между ServiceStack и MVC

, но там «позволяют» атрибут в ServiceStack?
Не то, что я знаю, но с Authenticate is just a filter вы, вероятно, могли бы создать подкласс и добавить некоторую поддержку для «allow».

0

Не уверен, если это новый, но посмотрел на код, и это на самом деле просто необязательный третий параметр AuthFeature конструктора, так что вы можете просто:

//htmlRedirect is optional 3rd param of AuthFeature constructor, here passing "~/signin" 
Plugins.Add(new AuthFeature(() => new AuthUserSession(), 
    new IAuthProvider[] { new CredentialsAuthProvider(), }, 
    "~/signin")); 
Смежные вопросы