openstf二次開發免登錄功能
阿新 • • 發佈:2018-01-22
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 } })
- 重點看一下 redirect: urlutil.addParams(options.appUrl, {jwt: token})這段代碼,意思是生成的token為jwt入參,跳轉到設備管理頁面,大家可以以日誌的形式,將urlutil.addParams(options.appUrl, {jwt: token})打印出來,復制到瀏覽器直接訪問,即可進到設備管理頁面
有了上面的知識點,於是繼續看下面的代碼
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二次開發免登錄功能