美文网首页vapor 实践
vapor Web Authentication

vapor Web Authentication

作者: 搞好关系 | 来源:发表于2018-10-23 10:36 被阅读7次

最近写东西一直没有加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
测试hello结果

2 基于API的无状态(后续更新)

相关文章

网友评论

    本文标题:vapor Web Authentication

    本文链接:https://www.haomeiwen.com/subject/bwyozftx.html