最近写东西一直没有加Authorware,也一直知道这个功能很重要,但是一直没有下定决心去看这一块,其实是有原因的:1 一开始粗略的看了一下,似是而非,于是感觉这个东东很难,很晦涩 2 由于之前看Laravel遗留的这一部分没看,感觉很难 。哈哈总之一句话:下意识的感觉这部分很难,所以它难……
下意识中感觉他很难,但是理智还是要上的--理智告诉我这部分要去实践,去克服……
分类
web基于session
2 基于API的无状态
1 web基于session
我们分离出一个web.swfit文件来实现,此处的web登陆认证
第一步就是让用户Model尊徐SessionAuthenticatable协议
extension SKUser: SessionAuthenticatable{}
第二部 通过SKUser模型创建一个Session中间件Middleware AuthenticationSessionsMiddleware
,然后将中间件加入到router分组中即可实现基于SKUser模型的认证
let session = SKUser.authSessionsMiddleware()
let auth = router.grouped("web")
.grouped(SessionsMiddleware.self)
.grouped(session)
接下来我们看看基于session的认证怎么来实现(先上代码:):
//测试认证
auth.get("hello") { (req) -> EventLoopFuture<View> in
let user = try req.requireAuthenticated(SKUser.self)
let logger = try req.make(Logger.self)
logger.debug("\(user)")
return try req.view().render("base")
}
//进行登录激活认证session模型
auth.get("login",Int.parameter) { (req) -> Future<String> in
let id = try req.parameters.next(Int.self)
return SKUser.find(id, on: req).map({ (user:SKUser?) -> (String) in
guard let user = user else{
throw Abort(.badRequest)
}
try req.authenticate(user)
return "Logged in\(user)"
})
}
外面我们看看结果:
登录:http://localhost:8080/web/login/1
![](https://img.haomeiwen.com/i1635153/9a78fb7afae4a136.png)
测试(成功登陆之后我们给出index首页):http://localhost:8080/web/hello
![](https://img.haomeiwen.com/i1635153/becce1ffea603470.png)
2 基于API的无状态(后续更新)
网友评论