1. 程式人生 > >openstf二次開發免登錄功能

openstf二次開發免登錄功能

gin cep not default cte option -c params esp

openstf已經很流行了現在有個需求,需要把openstf介入到現有系統中,直接跳轉到設備管理頁面, 話不多說,直接上代碼

以下為stf源碼中mock登錄

app.post(‘/auth/api/v1/mock‘, function(req, res) {
    var log = logger.createLogger(‘auth-mock‘)
    log.setLocalIdentifier(req.ip)
    switch (req.accepts([‘json‘])) {
      case ‘json‘:
        requtil.validate(req, function() {
            req.checkBody(‘name‘).notEmpty()
            req.checkBody(‘email‘).isEmail()
          })
          .then(function() {
            log.info(‘Authenticated "%s"‘, req.body.email)
            var token = jwtutil.encode({
              payload: {
                email: req.body.email
              , name: req.body.name
              }
            , secret: options.secret
            , header: {
                exp: Date.now() + 24 * 3600
              }
            })

            log.info(‘stf login token: ‘, urlutil.addParams(options.appUrl, {
              jwt: token
            }))
            res.status(200)
              .json({
                success: true
              , redirect: urlutil.addParams(options.appUrl, {
                  jwt: token
                })
              })
          })
          .catch(requtil.ValidationError, function(err) {
            res.status(400)
              .json({
                success: false
              , error: ‘ValidationError‘
              , validationErrors: err.errors
              })
          })
          .catch(function(err) {
            log.error(‘Unexpected error‘, err.stack)
            res.status(500)
              .json({
                success: false
              , error: ‘ServerError‘
              })
          })
        break
      default:
        res.send(406)
        break
    }
  })
  1. 重點看一下 redirect: urlutil.addParams(options.appUrl, {jwt: token})這段代碼,意思是生成的token為jwt入參,跳轉到設備管理頁面,大家可以以日誌的形式,將urlutil.addParams(options.appUrl, {jwt: token})打印出來,復制到瀏覽器直接訪問,即可進到設備管理頁面
  2. 有了上面的知識點,於是繼續看下面的代碼

    app.get(‘/auth/api/v1/url‘, function(req, res) {
    var log = logger.createLogger(‘auth-api-url‘)
    log.setLocalIdentifier(req.ip)
    var userName = req.query.username
    log.info(‘傳入的username: ‘ + userName)
    if(userName) {
      var token = jwtutil.encode({
        payload: {
          email: userName + ‘@zbj.com‘
          , name: userName
        }
        , secret: options.secret
        , header: {
          exp: Date.now() + 24 * 3600
        }
      })
      log.info(‘生成的token ‘ + token)
      var respStr = urlutil.addParams(options.appUrl, {
        jwt: token
      })
      log.warn(‘返回的登錄地址 ‘ + respStr)
      // 渲染列表頁面,支持跨域
      res.header(‘Access-Control-Allow-Origin‘, ‘*‘)
      res.jsonp({url: respStr})
    }
       else {
    res.status(400)
      .json({
        success: false
        , error: ‘ValidationError‘
        , validationErrors: err.errors
      })
      }
      })

    只需要輸入一個username就可以登錄系統,如果用戶不存在,openstf會自動添加一條用戶記錄,usermail這裏是直接拼接的,也可以直接轉入usermail,username

openstf二次開發免登錄功能