AuthMiddleware
是为项目添加授权的核心。 它负责初始化依赖关系,检查凭据和处理会话。
Create
遵守Auth.User
协议的类都可以创建一个AuthMiddleware
,假设我们有一个遵守Auth.User
协议的User
类。
Note: 你可能需要在
User
前添加上模块名来消除歧义。
import Auth
let auth = AuthMiddleware(user: User.self)
创建AuthMiddleware
如此简单,你也可以添加其他参数进行自定义。
Cookie
通过传递一个CookieFactory
自定义AuthMiddleware
的cookie类型。
let auth = AuthMiddleware(user: User.self) { value in
return Cookie(
name: "vapor-auth",
value: value,
expires: Date().addingTimeInterval(60 * 60 * 5), // 5 hours
secure: true,
httpOnly: true
)
}
Cache
支持自定义CacheProtocol
,默认的是使用MemoryCache
,服务器重启时缓存不会保留,并且不允许不同的实例共享缓存。
import VaporRedis
let redis = RedisCache()
let auth = AuthMiddleware(user: User.self, cache: redis)
Note:上面的示例使用了Redis-provider。
Realm
如果想进一步自定义AuthMiddleware
可以使用Realm
,它可以脱离Auth.User
协议进行用户的注册和验证。
let facebook = FacebookRealm()
let auth = AuthMiddleware(user: User.self, realm: facebook)
Note:
FacebookRealm
是假设的Realm库。
Add
创建AuthMiddleware
之后就可以添加到Droplet
中了:
let drop = Droplet()
drop.middleware.append(auth)
Sharing Cache
如果你想Droplet和AuthMiddleware共享CacheProtocol
,可以将相同的实例传给两者。
import Vapor
import VaporRedis
let redis = RedisCache()
let auth = AuthMiddleware(user: User.self, cache: redis)
let drop = Droplet()
drop.cache = redis
drop.middleware.append(auth)
网友评论