最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Adonisjs

运维笔记admin17浏览0评论

Adonisjs

Adonisjs

有没有办法通过基本身份验证来保护adonis中静态服务的资产?

无法将路由器中间件添加到/ public目录中的静态服务文件中...

所以,例如:

  • 我有/public/docs/index.html
  • 在服务adonis并点击localhost后:3333 / docs我将获得index.html的内容

我想浏览器提示基本身份验证,所以我尝试添加:

Route.get('/docs').middleware(['auth:basic'])

这将无法正常工作:.0/http-context#_request_flow Beacuase serve static是在路由器命中之前发生的服务器中间件。

任何想法如何实现这一目标?

回答如下:

在写完这个问题后,我意识到我只需要编写自己的服务器中间件,它将在静态中间件之前运行......所以我结束了这样做:

  • 应用程序/中间件/服务器/ StaticAuth.js

'use strict'

const auth = use('basic-auth')
const config = use('Adonis/Src/Config').get('auth.staticAuth')
const validConfig = config && config.protectedUrls.length

class StaticAuth {
  async handle({request, response}, next) {

    // if there is no valid config... skip this middleware
    if(!validConfig) return await next();

    // check if currently visited url is matching protectedUrls
    if(!request.match(config.protectedUrls)) return await next()

    // access native node request/response
    const req = request.request
    const res = response.response

    // gather credentials
    const credentials = auth(req)

    if (!credentials || credentials.name !== config.username || credentials.pass !== config.password) {
      res.statusCode = 401
      // send Basic Auth header so browser prompts user for user/pass
      res.setHeader('WWW-Authenticate', `Basic realm="${config.realm || 'Protected Area'}"`)
      res.end('Access denied')
    }

    await next()
  }
}

module.exports = StaticAuth

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论