【发布时间】:2016-05-23 23:29:42
【问题描述】:
我遇到了 Firebase 3.0.3 的问题,它会引发以下错误:
FIREBASE WARNING: Exception was thrown by user callback. Error: Blocked a frame with origin "https://localhost:3000" from accessing a cross-origin frame.
at Error (native)
at derez (<anonymous>:995:515)
at derez (<anonymous>:1001:208)
at derez (<anonymous>:1001:208)
at derez (<anonymous>:1001:208)
at derez (<anonymous>:1001:208)
at derez (<anonymous>:1001:208)
at derez (<anonymous>:1001:208)
at derez (<anonymous>:1001:208)
at derez (<anonymous>:1001:208)
Uncaught SecurityError: Blocked a frame with origin "https://localhost:3000" from accessing a frame with origin "https://falkor.firebaseapp.com". Protocols, domains, and ports must match.
我的堆栈使用 React 15.1.0、Redux 3.5.2、Babel-Core 6.9.0 和 webpack 1.13.1。
以下是重要部分:
// ./src/constants/index.js
import * as firebase from 'firebase';
firebase.initializeApp(JSON.parse(process.env.FIREBASE_CONFIG));
export const ref = firebase.database().ref();
export const auth = firebase.auth();
// ./src/actions/auth.js
import * as actions from './';
import { ref, auth } from '../constants';
export const loadAuth = () =>
(dispatch, getState) => {
const { subscribed } = getState().firebase;
if (subscribed.indexOf('auth') < 0) {
dispatch(actions.fbaseSubscribed('auth'));
auth.onAuthStateChanged(user => {
if (user) {
dispatch(loadMe(user.uid));
dispatch(actions.auth(user));
}
});
}
};
const serialize = data => ({ [data.key]: data.val() });
export const loadMe = (uid) =>
(dispatch, getStore) => {
const { subscribed } = getStore().firebase;
if (subscribed.indexOf('me') < 0) {
dispatch(actions.fbaseSubscribed('me'));
const item = ref.child('teamMembers').child(uid);
item.on('child_added', data => dispatch(actions.me(serialize(data))));
item.on('child_changed', data => dispatch(actions.me(serialize(data))));
item.on('child_removed', data => dispatch(actions.me(serialize(data))));
}
};
export const login = ({email, password}) =>
() => {
auth.signInWithEmailAndPassword(email, password).catch(err => console.error(err));
};
export const renewSession = token =>
() => {
auth.signInWithCustomToken(token).catch(err => console.error(err));
};
当我尝试quickstart app 时,我没有遇到任何关于在页面头部初始化的 firebase 配置的问题。我只在使用 NPM 安装模块并将其与 webpack 捆绑时遇到此问题。
任何帮助将不胜感激,我已经摸索了几个小时了。
【问题讨论】:
-
我在同一个堆栈上也有同样的问题,而且快速启动应用程序也不会重现问题
-
我只是意识到使用我的应用程序的 dist 版本不会发生错误。似乎是 webpack-devserver 导致了问题
-
好像和webpack-dev-middleware有关
-
我在运行 dist 代码时遇到了同样的问题,所以我不认为这是
webpack-server的问题 -
我发现在我的代码中有一个错误,我试图调度一个将用户作为参数传递的操作,但是用户,如果我从操作中删除用户,我没有收到错误。当firebase promise的“then”语句中发生另一个错误时,似乎会发生错误。解决它即使使用身份验证也对我有用。
标签: javascript reactjs firebase webpack babeljs