2016-10-06 2 views
1

Я пытаюсь реализовать собственный пользовательский CredentialsAuthProvider. Сервер, кажется, работает хорошо со следующей реализацией:Использование CustomCredentialsAuthProvider в JsonServiceClient

public class MyCustomCredentialsAuthProvider : CredentialsAuthProvider 
{ 
    public override bool TryAuthenticate(IServiceBase authService, string userName, string password) 
    { 
     if (userName == "testuser" && password == "1234") 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

    public override IHttpResult OnAuthenticated(IServiceBase authService, IAuthSession session, IAuthTokens tokens, 
               Dictionary<string, string> authInfo) 
    { 
     session.FirstName = "Testuser Joe Doe"; 

     authService.SaveSession(session, SessionExpiry); 
     return null; 
    } 

} 

Когда я звоню в моем браузере http://localhost:8088/auth/credentials?UserName=testuser&Password=1234 я вернусь страницу, содержащую идентификатор сеанса и TestUser Джо Доу. Выглядит хорошо.

Теперь я пытаюсь назвать это от моего клиента Windows WPF. Я создал страницу Login и класс LoginViewModel, так как я реализую шаблон MVVM. Но я не понимаю, что мне действительно нужно установить для свойства поставщика в классе Authenticate.

В моем классе WPF У меня есть следующие:

public partial class App : Application 
{ 
    public JsonServiceClient ServiceClient { get; private set; } 

    public App() 
    { 
     this.InitializeComponent();   
    } 
    // .... 
} 

И тогда в моем LoginViewModel у меня есть метод Логин(), который является реализация RelayCommand кнопки входа в систему, как так (Форма содержит также поле ., где вы должны ввести имя сервера приложений, так как есть более чем один Вот почему я сочинить BaseUri в обработчике):

private void Login() 
    { 
     var baseUri = $"http://{AppServer}:8088"; 
     ((App)Application.Current).InitServiceClient(baseUri); 
     var client = ((App) Application.Current).ServiceClient; 

     //var response = client.Send<AuthResponse>(new Auth { UserName = "Test", Password = "TestPassword" }); 
     var authResponse = client.Post(new Authenticate 
     { 
      provider = CredentialsAuthProvider.Name, // <-- WHAT SHOULD THIS BE??? 
      UserName = "testuser", 
      Password = "1234", 
      RememberMe = true, 
     }); 
     // .... 
    } 

CredentialsAuthProvider неизвестно компилятором. Что мне нужно передать здесь и какие сборки мне нужны? До сих пор у меня есть:

  • ServiceStack.Ckient
  • ServiceStack.Interfaces
  • ServiceStack.Text
  • MyService.ServiceModel // DLL, содержащая DTOs и т.д., NO реализаций

Что я пропал без вести и делаю неправильно здесь?

ответ

2

CredentialsAuthProvider.Name только обеспечивает напечатанный доступ к "credentials" строковый литерал, который вы можете использовать в своем месте, например:

var authResponse = client.Post(new Authenticate 
{ 
    provider = "credentials", 
    UserName = "testuser", 
    Password = "1234", 
    RememberMe = true, 
}); 

Вы можете найти список Auth provider literals в документации аутентификации.

Смежные вопросы