美文网首页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