認証ディレクティブを使用して、spray.io 1.3.2 のポスト リクエストで基本認証を試みています。私のコードは次のようになります:
val route: Route = {
pathPrefix("ato") {
pathPrefix("v1") {
path("orders" / "updateStatus") {
post {
authenticate(BasicAuth(userPasswordAuthenticator _, realm = "bd ato import api")) {
user =>
entity(as[String]) {e =>
complete {
s"Hello $e "
}
}
}
}
}
}
}
}
def userPasswordAuthenticator(userPass: Option[UserPass]): Future[Option[String]] =
Future {
if (userPass.exists(up => up.user == ato_import_v1_usr && up.pass == ato_import_v1_pwd)) Some("ato_v1")
else None
}
これは完全に正常に機能し、承認されたステータス Ok 200、承認されていない 401 です。ただし、ディレクティブの順序が次のように変更された場合:
val route: Route = {
pathPrefix("ato") {
pathPrefix("v1") {
authenticate(BasicAuth(userPasswordAuthenticator _, realm = "bd ato import api")) {
user =>
path("orders" / "updateStatus") {
post {
entity(as[String]) {e =>
complete {
s"Hello $e "
}
}
}
}
}
}
}
}
ステータス 405、HTTP メソッドは許可されていないアクセスに対して許可されていません。なぜそれが起こるのかわかりません。ある時点から、それは理にかなっており、資格情報が欠落しているなどの理由でパスが一致しません。
誰かがそれを明確にしてもらえますか?
v1 レベルで認証を行う理由は、すべてのバージョンを異なるパスワードで保護したかったからです。それを達成する方法はありますか?ディレクティブをチェーンする際のベストプラクティスは何ですか?
DRYの原則に従いたいと思います。
ありがとう