【问题标题】:No permission error in Firebase Cloud FunctionFirebase Cloud Function 中没有权限错误
【发布时间】:2020-09-16 12:46:07
【问题描述】:

我想使用 Passport.js + Firebase Cloud Function 实现 Slack 身份验证。但是当我重定向 URL 时,出现了禁止错误。

错误:

您的客户端无权从此服务器获取 URL /api/auth/slack?uid=XXXXXXXXXXX&redirectTo=http://localhost:3000

React 代码:

const slackAuthorizeURL = (uid) =>
  `https://us-central1-xxxxxxxxx.cloudfunctions.net/api/auth/slack?uid=${uid}&redirectTo=${window.location.href}`

<a href={slackAuthorizeURL}>Sign in with Slack</a>

服务器代码:

const express = require('express')
const session = require('express-session')
const app = express()
const allowedOrigins = [
  'http://localhost:3000',
]
const allowCrossDomain = (req, res, next) => {
  const origin = req.headers.origin
  if (allowedOrigins.includes(origin)) {
    res.header('Access-Control-Allow-Origin', origin)
  }
  res.header('Access-Control-Allow-Methods', 'GET,POST')
  res.header('Access-Control-Allow-Headers', 'Content-Type')
  next()
}
app.use(allowCrossDomain)

app.use(session({ secret: config.session.secret }))

const passport = require('passport')

app.use(passport.initialize())
app.use(passport.session())
app.get('/auth/slack', (req, res, next) => {
  req.session.uid = req.query.uid
  req.session.redirectTo = req.query.redirectTo
  passport.authenticate('slack')(req, res, next)
})

我已经在谷歌云平台的api上设置了allUsersCloud Functions Admin

【问题讨论】:

    标签: firebase express google-cloud-functions


    【解决方案1】:

    我错过了在 Google Cloud Platform 的 api 上正确设置 allUsers 到 Cloud Functions Admin。

    https://cloud.google.com/functions/docs/securing/managing-access#allowing_unauthenticated_function_invocation

    【讨论】: