我正在基于令牌的身份验证,并且我不知道如何authenticate
在我的路由中使用指令:
我access_token
从标题中获取。
post {
headerValueByName("Access_Token") {
access_token => {
authenticate(??????){
user => {
......
......
}
}
}
}
}
我该如何认证?
有几种方法可以执行此操作,您可以使用flavian建议的某些库执行此操作,也可以自己执行。Authenticate指令的作用不大,我只是“执行” Spray提供的标准身份验证机制,您可以在此处阅读有关它们的信息。如果这不是您想要的或不了解如何执行此操作,请举一个小例子。
让我们想象一下令牌身份验证的最简单情况,您的令牌被保存在某些存储中,并且仅通过比较它们就可以验证用户身份。所以我们有这个功能:
def validate(token: AuthToken): Future[Authentication[User]] = {
torage.findUserByToken(token) match {
case Some(user) => Right(user)
case None => Left(AuthenticationFailedRejection(..))
}
}
哪里Authentication[User]
是Either[Rejection, T]
如果您看一下authenticate
指令,它是用磁铁模式实现的,并且需要AuthMagnet
并且您有所有需要的东西,因为它具有转换功能:
implicit def fromFutureAuth[T](auth: ⇒ Future[Authentication[T]])(implicit executor: ExecutionContext): AuthMagnet[T] =
new AuthMagnet(onSuccess(auth))
所以现在您可以使用它:
post {
headerValueByName("Access_Token") { access_token => {
authenticate(validate(access_token)) { user => {
......
......
}
}
}
顺便说一句,如果您正在寻找一种安全可靠的方式来存储用户帐户,请检查stormpath,将它们与Spray api集成非常容易。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句