Javascript 如何在没有承诺的情况下返回函数中的值(访问令牌)?
我有一个导出为Javascript 如何在没有承诺的情况下返回函数中的值(访问令牌)?,javascript,node.js,api,express,spotify,Javascript,Node.js,Api,Express,Spotify,我有一个导出为模块的函数,因此我可以在主app.js中用作中间件函数,在登录后,spotify重定向到/callback 由于我不能将其作为承诺,并在它之后使用检索值。然后,我想知道如何获取登录另一个模块后生成的access\u令牌 提前感谢您。您可以在中间件之间共享价值,并在req中定义它。为了更简单的解释,以下是一个示例: const callback = (req, res) => { // your application requests refresh and acces
模块
的函数,因此我可以在主app.js
中用作中间件
函数,在登录后,spotify重定向到/callback
由于我不能将其作为承诺,并在它之后使用检索值。然后,我想知道如何获取登录另一个模块后生成的access\u令牌
提前感谢您。您可以在中间件之间共享价值,并在req中定义它。为了更简单的解释,以下是一个示例:
const callback = (req, res) => {
// your application requests refresh and access tokens
// after checking the state parameter
if (state === null || state !== storedState) {
...
} else {
res.clearCookie(stateKey);
var authOptions = {...};
//rq = require-promise
rq.post(authOptions, function(error, response, body) {
if (!error && response.statusCode === 200) {
var access_token = body.access_token,
refresh_token = body.refresh_token;
// we can also pass the token to the browser to make requests from there
res.redirect('/#' +
querystring.stringify({
access_token: access_token,
refresh_token: refresh_token
}));
}
});
}
};
它将共享给另一个中间件:
// the first middleware : checkAuth.js
const jwt = require('jsonwebtoken')
const authValidator = async (req,res,next) => {
// check token as requirement for auth user
let token = req.headers['authorization']
try {
let verifiedUser = await jwt.verify(token, 'yoursecret', (err, decode) => {
if (err) return res.send(err.message)
return decode
})
// assign verifiedUser to req
req.userData = verifiedUser
// passing to next middleware
next()
} catch (err) {
return res.send('no token provided')
}
}
exports.authValidator = authValidator
通过这条路线,您可以获得所有:
// second middleware : checkRole.js
const roleUser = async (req,res,next) => {
try {
// call the req.UserData and assign other value
if (req.UserData) req.userRole = 'Administrator'
// passing to next middleware
next()
} catch (err) {
return res.send('ooppsss')
}
}
exports.roleUser = roleUser
您可以在中间件之间共享值,并在req中定义它。为了更简单的解释,以下是一个示例:
const callback = (req, res) => {
// your application requests refresh and access tokens
// after checking the state parameter
if (state === null || state !== storedState) {
...
} else {
res.clearCookie(stateKey);
var authOptions = {...};
//rq = require-promise
rq.post(authOptions, function(error, response, body) {
if (!error && response.statusCode === 200) {
var access_token = body.access_token,
refresh_token = body.refresh_token;
// we can also pass the token to the browser to make requests from there
res.redirect('/#' +
querystring.stringify({
access_token: access_token,
refresh_token: refresh_token
}));
}
});
}
};
它将共享给另一个中间件:
// the first middleware : checkAuth.js
const jwt = require('jsonwebtoken')
const authValidator = async (req,res,next) => {
// check token as requirement for auth user
let token = req.headers['authorization']
try {
let verifiedUser = await jwt.verify(token, 'yoursecret', (err, decode) => {
if (err) return res.send(err.message)
return decode
})
// assign verifiedUser to req
req.userData = verifiedUser
// passing to next middleware
next()
} catch (err) {
return res.send('no token provided')
}
}
exports.authValidator = authValidator
通过这条路线,您可以获得所有:
// second middleware : checkRole.js
const roleUser = async (req,res,next) => {
try {
// call the req.UserData and assign other value
if (req.UserData) req.userRole = 'Administrator'
// passing to next middleware
next()
} catch (err) {
return res.send('ooppsss')
}
}
exports.roleUser = roleUser