Ответ 1
Аутентификатор - это просто функция UserCredentials => Option[T]
, где UserCredentials
в случае наличия (проверьте с помощью сопоставления с образцом) Provided
имеет метод verifySecret(secret)
, который вам необходимо безопасно вызывать и возвращать Some
(некоторые пользователи, например) в случае успеха, например:
def myAuthenticator: Authenticator[User] = {
case [email protected](username) =>
if(p.verifySecret(myGetSecret(username))) Some(username) else None
case Missing => None //you can throw an exeption here to get customized response otherwise it will be regular `CredentialsMissing` message
}
myGetSecret
- это ваша пользовательская функция, которая получает имя пользователя и возвращает ваш секрет (например, пароль), получая его, возможно, из базы данных. verifySecret
будет безопасно сравнивать (чтобы избежать временной атаки) предоставил пароль с паролем от myGetSecret
. Как правило, "секрет" - это любая скрытая информация (например, хэш учетных данных или токен), но в случае базовой аутентификации это просто простой пароль, извлеченный из заголовков http.
Если вам нужен более индивидуальный подход - используйте authenticateOrRejectWithChallenge
, который получает HttpCredentials
в качестве ввода, поэтому вы можете извлечь из него предоставленный пароль.
Подробнее о авторизации в scaladocs.