前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vapor Web Authentication

vapor Web Authentication

作者头像
大话swift
发布2019-07-03 15:53:32
5270
发布2019-07-03 15:53:32
举报
文章被收录于专栏:大话swift大话swift

最近写东西一直没有加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

测试(成功登陆之后我们给出index首页):http://localhost:8080/web/hello

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大话swift 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档