Я пытаюсь реализовать собственный пользовательский 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 реализаций
Что я пропал без вести и делаю неправильно здесь?