Vapor文档学习廿四:AUTH - Middleware

2017-04-24  本文已影响96人  Supremodeamor

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)
上一篇 下一篇

猜你喜欢

热点阅读