在 Facebook 注销按钮上收到 OVERRIDING ACCESS_TOKEN 警告。这是一周前开始的
Getting OVERRIDING ACCESS_TOKEN warning on facebook logout button. This started a week ago
我正在使用 FB javascript SDK 3.3 使用 facebook 登录。当我点击 logout 时,我在控制台中收到警告。
您正在覆盖当前的访问令牌,这意味着其他一些应用需要不同的访问令牌,您可能会破坏某些东西。请考虑将 access_token 直接传递给 API 参数,而不是覆盖全局设置。
这是我正在测试 FB 登录的虚拟反应组件。
import React, { Component } from 'react'
import config from "../util/config";
export default class LoginTest extends Component {
constructor(props) {
super(props);
this.state = {
loggedin: undefined,
username: "",
}
}
componentDidMount() {
let that = this;
window.fbAsyncInit = function () {
window.FB.init({
appId: config.FB_APP_ID,
cookie: true,
xfbml: true,
version: 'v3.3'
});
window.FB.getLoginStatus(function (response) {
if (response.status === 'connected') {
that.setState({ loggedin: true, username: response.authResponse.userID })
}
else that.setState({ loggedin: false });
});
};
(function (d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
}
login = () => {
let that = this;
this.setState({ loggedin: undefined });
window.FB.login(function (response) {
if (response.status === 'connected') {
console.log("success", response);
that.setState({ loggedin: true, username: response.authResponse.userID })
} else {
console.log("fail", response);
that.setState({ loggedin: false, username: "" })
}
});
}
logout = () => {
this.setState({ loggedin: undefined });
let that = this;
window.FB.logout(function (response) {
if (response.status !== 'connected') {
that.setState({ loggedin: false, username: ""});
} else {
that.setState({ loggedin: true, username: "" });
}
});
}
render() {
return (
<div style={{ margin: "auto", textAlign: "center", marginTop: 200 }}>
{this.state.loggedin === undefined ?
<h1>Loading</h1> : null
}
{this.state.loggedin === true ?
<div>
<h4>{this.state.username}</h4>
<button onClick={this.logout}>logout</button>
</div>
: null
}
{this.state.loggedin === false ?
<div>
<button onClick={this.login}>Login</button>
</div> : null
}
</div>
)
}
}
那是因为你调用了 FB.getLoginStatus 然后调用了 FB.login.
该错误仅表示您在第一次调用 .getLoginStatus 时收到访问令牌,然后在调用 .login 时被覆盖。
您可以通过删除 .getLoginStatus(如果您要调用 .login 则可能没有必要)或重新使用 .getLoginStatus 中的访问令牌然后将其传递给 .login 函数来解决此问题。
我正在使用 FB javascript SDK 3.3 使用 facebook 登录。当我点击 logout 时,我在控制台中收到警告。
您正在覆盖当前的访问令牌,这意味着其他一些应用需要不同的访问令牌,您可能会破坏某些东西。请考虑将 access_token 直接传递给 API 参数,而不是覆盖全局设置。
这是我正在测试 FB 登录的虚拟反应组件。
import React, { Component } from 'react'
import config from "../util/config";
export default class LoginTest extends Component {
constructor(props) {
super(props);
this.state = {
loggedin: undefined,
username: "",
}
}
componentDidMount() {
let that = this;
window.fbAsyncInit = function () {
window.FB.init({
appId: config.FB_APP_ID,
cookie: true,
xfbml: true,
version: 'v3.3'
});
window.FB.getLoginStatus(function (response) {
if (response.status === 'connected') {
that.setState({ loggedin: true, username: response.authResponse.userID })
}
else that.setState({ loggedin: false });
});
};
(function (d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
}
login = () => {
let that = this;
this.setState({ loggedin: undefined });
window.FB.login(function (response) {
if (response.status === 'connected') {
console.log("success", response);
that.setState({ loggedin: true, username: response.authResponse.userID })
} else {
console.log("fail", response);
that.setState({ loggedin: false, username: "" })
}
});
}
logout = () => {
this.setState({ loggedin: undefined });
let that = this;
window.FB.logout(function (response) {
if (response.status !== 'connected') {
that.setState({ loggedin: false, username: ""});
} else {
that.setState({ loggedin: true, username: "" });
}
});
}
render() {
return (
<div style={{ margin: "auto", textAlign: "center", marginTop: 200 }}>
{this.state.loggedin === undefined ?
<h1>Loading</h1> : null
}
{this.state.loggedin === true ?
<div>
<h4>{this.state.username}</h4>
<button onClick={this.logout}>logout</button>
</div>
: null
}
{this.state.loggedin === false ?
<div>
<button onClick={this.login}>Login</button>
</div> : null
}
</div>
)
}
}
那是因为你调用了 FB.getLoginStatus 然后调用了 FB.login.
该错误仅表示您在第一次调用 .getLoginStatus 时收到访问令牌,然后在调用 .login 时被覆盖。
您可以通过删除 .getLoginStatus(如果您要调用 .login 则可能没有必要)或重新使用 .getLoginStatus 中的访问令牌然后将其传递给 .login 函数来解决此问题。