Rod*_*mez 3 access-token spray
我正在进行基于令牌的身份验证,我不知道我应该如何authenticate在我的路由中使用指令:
我access_token从标题中得到了.
post {
headerValueByName("Access_Token") {
access_token => {
authenticate(??????){
user => {
......
......
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我该如何进行身份验证?
有几种方法可以做到这一点,你可以使用像flavian提出的一些库来做或者自己做.认证指令没有太大作用,我只是"执行"Spray提供的标准认证机制,你可以在这里阅读它们.如果这不是你想要的或者不理解如何做到这一点,这里有一个小例子.
让我们假设最简单的令牌认证案例,您的令牌保存在一些存储中,并验证您想要比较它们的用户.所以我们有这个功能:
def validate(token: AuthToken): Future[Authentication[User]] = {
torage.findUserByToken(token) match {
case Some(user) => Right(user)
case None => Left(AuthenticationFailedRejection(..))
}
}
Run Code Online (Sandbox Code Playgroud)
哪里Authentication[User]是Either[Rejection, T]
如果你看看authenticate指令,它是用磁铁模式实现的,并且需要AuthMagnet你有一切可以得到它,因为它有一个转换:
implicit def fromFutureAuth[T](auth: ? Future[Authentication[T]])(implicit executor: ExecutionContext): AuthMagnet[T] =
new AuthMagnet(onSuccess(auth))
Run Code Online (Sandbox Code Playgroud)
所以现在你可以使用它:
post {
headerValueByName("Access_Token") { access_token => {
authenticate(validate(access_token)) { user => {
......
......
}
}
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果您正在寻找一种安全的存储用户帐户的方法,请检查stormpath,将它们与Spray api集成起来非常容易.
| 归档时间: |
|
| 查看次数: |
4140 次 |
| 最近记录: |