我使用过护照passport发策略,因此在执行策略时,我无法在客户端看到护照登录窗口
所以这就是我最初要做的
class Auth extends ParentClass {
constructor(context, options) {
super()
this.app.get('/callback/:service', (req, res) =>
this.callbackEndpoint(req,res))
this.app.get('/', (req, res, next) => this.loginEndpoint(req, res, next))
}
async loginEndpoint (req, res, next) {
if (req.query.Twitter) {
console.log(`Inside Twitter Authentication`)
passport.authenticate('twitter', { scope : ['email'] })(req,res,next);
}
}
在我的ParentClass中,我正在或多或少地初始化东西
class ParentClass {
this.use(corsMiddleware(options.CORS_URLS))
this.use(bodyParser.json())
this.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
cookie: { secure: true }
}))
this.use(passport.initialize())
this.use((passport.session()))
}
use (middleware) {
this.app.use(middleware)
}
}
最后,这是我的护照策略
passport.use(new TwitterStrategy({
consumerKey: functions.config().twitterCredentials.apikey,
consumerSecret: functions.config().twitterCredentials.apiSecretKey,
callbackURL: redirect_uri,
passReqToCallback: true
}, async (req, accessToken, refreshToken, params, profile, done) => {
console.log(`logging from Passport Twitter ${req.workspace, req.accessToken}`)
done()
}))
在第一个代码段中,我看到了日志Inside Twitter Authentication
,但是此后什么也没有发生。
我期望什么?一个显示给我登录Twitter的窗口,但未显示任何内容,一段时间后,我在控制台信息中得到了这个信息:Execution took 569847 ms, finished with status: 'timeout'
所以这是我的问题: 1.我们可以在Google函数中使用护照和正常的oauth流吗? (如果没有回答,请发表评论) 2.如果是,我们可以在上面的代码中使用该错误。
更新说明:在搜寻我的问题时,我偶然发现了这个老问题,并意识到虽然它有些相似,但对前一个问题的描述却非常模糊。我今天晚些时候问了一个类似的问题,但决定将其与这个问题合并。
答案 0 :(得分:1)
在代码的第一部分,您需要将passport.authenticate
直接传递给get处理程序。像这样:
class Auth extends ParentClass {
constructor(context, options) {
super()
this.app.get('/callback/:service', (req, res) =>
this.callbackEndpoint(req,res))
this.app.get('/', passport.authenticate('twitter', { scope : ['email'] })(req,res,next))
}
}
我认为此“应用程序”已安装在/ auth / twitter之类的路径上
在前端,您将打开一个弹出窗口,其URL指向/ auth / twitter。像这样:
<button onclick="oauthPrompt('twitter')">Login with Twitter</button>
<script>
function oauthPrompt(service) {
const url = '/auth/' + service
var newWindow = window.open(url, 'name', 'height=600,width=450')
if (window.focus) {
newWindow.focus();
}
}
</script>