标签: facebook-authentication

Session.StatusCallback无法解析为某种类型--Facebook API

我按照Facebook上的登录验证教程,将以下代码复制到我的Android应用程序中

private Session.StatusCallback callback = 
    new Session.StatusCallback()
{
    @Override
    public void call(Session session, 
            SessionState state, Exception exception) {
        onSessionStateChange(session, state, exception);
    }
};
Run Code Online (Sandbox Code Playgroud)

但是,它给了我以下错误:

Session.StatusCallback cannot be resolved to a type
Run Code Online (Sandbox Code Playgroud)

这导致以下错误:

callback cannot be resolved to a variable
Run Code Online (Sandbox Code Playgroud)

Facebook API调用的其他地方也给我带来了错误,但并不是所有的Facebook API调用.另一个我收到错误的地方如下:

Request request = Request.newMeRequest(session, 
                    new Request.GraphUserCallback() {
                @Override
                public void onCompleted(GraphUser user, Response response) {
                    // If the response is successful
                    if (session == Session.getActiveSession()) {
                        if (user != null) {
                            // Set the id for the ProfilePictureView …
Run Code Online (Sandbox Code Playgroud)

eclipse android facebook facebook-authentication facebook-android-sdk

4
推荐指数
1
解决办法
1万
查看次数

Facebook:在Android上刷新AccessToken

他们在AccessToken文档中说:"使用Facebook SDK的原生移动应用程序将获得长期访问令牌,大约可以使用60天.当使用您的应用程序的人向Facebook提出请求时,这些令牌将每天更新一次.服务器".
这是否意味着只有当Facebook服务器的请求来自客户端Android应用程序时(我不确定如何解释"......使用您的应用程序的人..."),那么访问令牌将被刷新?
在我的应用程序中,我使用检索访问令牌AccessToken.getCurrentAccessToken(),将访问令牌发送到我的服务器,服务器向Facebook的服务器发出请求,目的是验证收到的访问令牌.
在这种情况下,是否还会刷新访问令牌?(在这种情况下,服务器正在向FB的服务器发出请求,而不是直接"使用我的应用程序的人")

  • 如果是,Android客户端应用程序中的Facebook SDK如何知道我的服务器向Facebook的服务器发出了请求?AccessToken.getCurrentAccessToken()Android客户端是否返回刷新的访问令牌?

谢谢

编辑:这可以帮助其他人节省时间:我发现访问令牌在初始化FacebookSDK时会在某些条件下自动刷新(Facebook文档没有清楚地解释访问令牌是如何刷新的 - 请参阅上面的问题).
请注意我使用的是FacebookSDK 4.0 for Android.
按照下面的步骤操作:

  1. FacebookSDK.sdkInitialize(Context, InitializeCallback)

    if (AccessToken.getCurrentAccessToken() != null && Profile.getCurrentProfile() == null)

  2. Profile.fetchProfileForCurrentAccessToken()

  3. Utility.getGraphMeRequestWithCacheAsync()

    GraphRequest graphRequest = getGraphMeRequestWithCache(accessToken); graphRequest.setCallback(graphCallback); graphRequest.executeAsync();

  4. ... executeBatchAsync(GraphRequestBatch requests)
    GraphRequestAsyncTask asyncTask = new GraphRequestAsyncTask(requests); asyncTask.executeOnSettingsExecutor();
  5. GraphRequestAsyncTask doInBackground()方法

if (connection == null) { return requests.executeAndWait(); } else { return GraphRequest.executeConnectionAndWait(connection, requests); }

对于这两种情况,代码将以此方法结束:

public static List<GraphResponse> executeConnectionAndWait(
            HttpURLConnection connection,
            GraphRequestBatch requests)
Run Code Online (Sandbox Code Playgroud)
  1. 注意AccessTokenManager.getInstance().extendAccessTokenIfNeeded();线.顾名思义,每天最多扩展一次访问令牌.

facebook facebook-graph-api facebook-authentication facebook-access-token facebook-sdk-4.0

4
推荐指数
1
解决办法
4573
查看次数

将客户端身份验证与服务器端身份验证混合使用

我正在努力将客户端身份验证与服务器端身份验证相结合,我感谢社区的帮助.我的应用程序很简单,所有用户都在Facebook上,所以我想使用FB小部件进行登录/身份验证和注册.

加载页面后,我检查FB.getLoginStatus,如果用户没有登录,则显示fb:login-button.然后用户按下登录按钮,我收到了auth.login事件.从这里开始,我对下一步行动有点不确定,我想知道我是否错过了一点.

我尝试将用户重定向到服务器,我希望我可以在那里使用php-sdk检查用户是否登录而没有任何模糊,但当我做$ facebook-> api('/ me')我得到没有反应.

那么我应该如何以安全的方式将授权信息传递给服务器(我的应用程序不使用https),以便在使用fb-login-button时我可以确保用户在服务器端进行身份验证和授权?

authentication facebook-javascript-sdk facebook-authentication

3
推荐指数
1
解决办法
3947
查看次数

用户在Facebook Auth Dialogue Javascript SDK中跳过权限

我在页面选项卡中有一个使用facebook javascript sdk的应用程序.当新用户访问该应用程序时,我会收到预期的"使用Facebook登录"弹出窗口.我也有一些扩展权限,我已经放在FB.Login的scope参数中.用户使用Facebook登录后,我会看到预期的扩展权限弹出窗口.唯一的问题是如果用户跳过扩展权限,对话框将返回access_token,但它对扩展权限无效.代码示例如下.

window.fbAsyncInit = function () {
    FB.Canvas.setAutoGrow();
    FB.init({
        appId: facebookAppId, 
        status: true, // check login status
    });

    function updateFBInfo(response) {
        console.log('updateResp:');
        if (response.authResponse) {
            //user is already logged in and connected
            FB.api('/me', function (info) {
                displayUserInfo(info, response);
            });
        }
        else {
            FB.login(function (loginResponse) {
                if (loginResponse.authResponse) {
                    FB.api('/me', function (info) {
                        displayUserInfo(info, loginResponse);
                    });
                }
            }, { scope: 'email,manage_pages,offline_access,publish_stream' });
        }
    }

    FB.getLoginStatus(updateFBInfo);
};
Run Code Online (Sandbox Code Playgroud)

我想我的问题是,我错过了什么(这一定很容易),或者有没有办法检查并查看返回的acces_token是否真的有效?

facebook facebook-graph-api facebook-javascript-sdk facebook-authentication

3
推荐指数
1
解决办法
3420
查看次数

Facebook应用程序不会重定向移动网站网址

在我的应用设置上,我将此作为移动网址:

https://example.herokuapp.com/mobile.php#&ui-state=dialog
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用智能手机从Facebook访问应用程序时,Facebook会重定向到OAuth URL几毫秒,然后重定向到:

https://example.herokuapp.com/?state=63903485c518f2ae5deca667b9a............#_=_
Run Code Online (Sandbox Code Playgroud)

由于/mobile.php丢失,因此会加载桌面版本.

我怎样才能解决这个问题?非常感谢任何建议.

非常感谢你

编辑:一块安全码

try {
    $facebook = new Facebook(array(
            'appId'  => AppInfo::appID(),
            'secret' => AppInfo::appSecret(),
    ));
    $access_token=$_GET['access_token'];
    Log::debug("BaseControl:access token: ". $access_token);
    if(isset($access_token)){
        $facebook->setAccessToken($access_token);
    }
    $user_id = $facebook->getUser();
} catch (Exception $e) {
    exit("Error getting facebook data");
}

if ($user_id) {
    try {
        $basic = $facebook->api('/me');//se necesita access token, si no se tiene falla
    } catch (FacebookApiException $e) {
        if (!$facebook->getUser()) {
            exit("Invalid access token");
        }
    }
    if($basic==null){
        exit("Application not installed");
    }
    $user=UsersLogic::getUser($user_id);
    if($user==null){
        exit("User …
Run Code Online (Sandbox Code Playgroud)

mobile jquery facebook facebook-graph-api facebook-authentication

3
推荐指数
1
解决办法
7336
查看次数

尝试获取访问令牌时出现“请求无效,因为应用程序机密与客户端令牌相同”错误

我正在使用 facebook php sdk 没有任何问题在我的网站上提供 facebook 登录。几天后,我无法再登录了。我按照https://developers.facebook.com/docs/howtos/login/server-side-login/ 上描述的步骤操作,但在第 6 步失败并显示以下响应:

{
  error: {
    message: "The request is invalid because the app secret is the same as the client token",
    type: "OAuthException",
    code: 1
  }
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么它停止工作。你有没有遇到过同样的问题?

谢谢

facebook-authentication facebook-oauth facebook-php-sdk app-secret facebook-access-token

3
推荐指数
1
解决办法
5086
查看次数

facebook 登录仅显示之前在 flutter 应用程序中登录的帐户

我已经成功地将facebook登录集成到flutter应用程序中并且能够登录。

\n

但它始终是我能够登录的同一个帐户,并且除了之前的 Facebook 帐户之外,它没有向我显示任何其他登录选项。下面是我执行的代码。

\n
Future<void> handleLogin() async {\n\xc2\xa0\xc2\xa0final FacebookLoginResult result = await facebookLogin.logIn([\'email\']);\n\xc2\xa0\xc2\xa0switch (result.status) {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0case FacebookLoginStatus.cancelledByUser:\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0break;\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0case FacebookLoginStatus.error:\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0break;\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0case FacebookLoginStatus.loggedIn:\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0try {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0await loginWithfacebook(result);\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0} catch (e) {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0print(e);\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0}\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0break;\n\xc2\xa0\xc2\xa0}\n}\n\nFuture loginWithfacebook(FacebookLoginResult result) async {\n\xc2\xa0\xc2\xa0final FacebookAccessToken accessToken = result.accessToken;\n\xc2\xa0\xc2\xa0AuthCredential credential =\n\xc2\xa0\xc2\xa0FacebookAuthProvider.credential(accessToken.token);\n\xc2\xa0\xc2\xa0var a = await _auth.signInWithCredential(credential);\n\xc2\xa0\xc2\xa0setState(() {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0isSignIn = true;\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0_user = a.user;\n\xc2\xa0\xc2\xa0});\n}\n\nFuture<void> gooleSignout() async {\n\xc2\xa0\xc2\xa0await _auth.signOut().then((onValue) {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0setState(() {\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0facebookLogin.logOut();\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0isSignIn = false;\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0});\n\xc2\xa0\xc2\xa0});\n}\n
Run Code Online (Sandbox Code Playgroud)\n

请建议修改代码以删除之前通过 facebook 登录的情况。\n我一如既往地看到的屏幕截图截屏

\n

android facebook-authentication firebase firebase-authentication flutter

3
推荐指数
1
解决办法
1525
查看次数

fb:登录按钮没有显示在Firefox,IE或Opera中 - 但在Chrome中运行正常

这似乎在我没有任何改变的情况下发生.突然之间,除Chrome之外的任何浏览器都没有处理fb:login-button标签,它只是将标签中的任何文本显示为纯文本.

在网上搜寻几个小时,寻找可能的原因/解决方案后,我发现没有任何解决这种特殊行为的方法.

所以,我已经创建了最基本的例子来说明问题,并把它放在这里:http: //silverbucket.net/examples/fblogin/welcome.htm

上面的示例显示了Chrome中的fb-login框,但不包括Firefox,IE或Opera.

总结一下,上面链接页面中的内容,首先是顶部的html标签:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:fb="http://www.facebook.com/2008/fbml" xmlns:og="http://opengraphprotocol.org/schema/" lang="en">
Run Code Online (Sandbox Code Playgroud)

在我的头脑中:

<script src="http://connect.facebook.net/en_US/all.js"></script>
Run Code Online (Sandbox Code Playgroud)

在身体中,我的头部正下方:

<div id="fb-root"></div>
Run Code Online (Sandbox Code Playgroud)

然后是实际的fb-login-button:

<fb:login-button scope="email, user_interests, user_likes, publish_stream">log in with facebook</fb:login-button>
Run Code Online (Sandbox Code Playgroud)

而且,在页面底部,就在关闭body标签之前,我有FB JavaScript:

<script>
  $(document).ready(function() {
    window.fbAsyncInit = function() {
      FB.init({
        appId   : '153787078069017',
        cookie  : true, // enable cookies to allow the server to access the session
        xfbml   : true, // parse XFBML
        //channelUrl : '/channel.html', // channel.html file
        oauth   : true, // enable OAuth 2.0
        status : false
      });

      // …
Run Code Online (Sandbox Code Playgroud)

facebook facebook-javascript-sdk facebook-authentication

2
推荐指数
1
解决办法
5156
查看次数

即使他/她已登录,如何强制用户重新输入 Facebook 密码

我试图让用户在进入我网站的某些部分时重新输入密码。我读过我应该使用“重新验证”授权类型来解决这个问题,但我遇到了两个问题。

  1. 当用户单击“重新验证”按钮时,密码已在“密码”输入框中填写。

  2. 当用户单击“重新验证”按钮然后关闭或单击授权窗口上的取消时,我仍然使用登录数据返回响应,并且基本上它“告诉”我的代码用户已登录。

有没有人遇到过这些问题?这是我的代码的一部分:

<fb:login-button id="facebook-reauth" onclick="return false;">Login with Facebook</fb:login-button>


<script type="text/javascript">
    $(document).ready(function () {
        document.getElementById('facebook-reauth').onclick = function () {
            FB.login(function (response) {
                if (response) {
                    window.location = '/Account/FacebookLogin?isCheckout=false';
                }
                else {
                    window.location = '/';
                }
            }, { scope: 'email', auth_type: 'reauthenticate' });
        };
    });
</script>
Run Code Online (Sandbox Code Playgroud)

编辑:

我尝试更改<fb:login-button />to<div />标记,但它根本没有帮助。

非常感谢!

authentication facebook facebook-authentication

2
推荐指数
1
解决办法
3122
查看次数

尝试在 Firebase 身份验证列表中添加 FB 用户时出现“错误:无效的 IdP 响应/凭据”

我一直致力于在基于 Expo 的应用程序中实现 Facebook 和 Google 登录方法。

将 Firebase 与我的应用连接后,我希望用户列在 Firebase 用户中。虽然 Google 登录似乎工作正常,但 Facebook 给出了如下所示的错误firebase.auth().signInWithCredential(credential)

[Error: Invalid IdP response/credential: http://localhost?id_token=EAAGUBzIZAgb0BABAkdrj5NcUcvljcsLeNBQlV5VUZAZC7M8e7sSRg2MkqlFCuD7tKjin4uZBep5gSs20oAo8fXKiUqq2deEbUl6HoaAUskTda7x49VCqqcbYh1W3566fMZBtRFB5S3fRV7D41AGVGPMAck91l1KiFCzQzCGtSf5g6ZBKoyHw03LOVONcOiwVZB4vXVcGPYmIzL3RuzzztdBNLRql5ndSk0ZD&providerId=facebook.com] 
Run Code Online (Sandbox Code Playgroud)

这是代码的相关部分:

  1. Firebase.js
// imports, configs and exports omitted
export const facebookProvider = new firebase.auth.FacebookAuthProvider;
Run Code Online (Sandbox Code Playgroud)
  1. LoadingScreen.js(登录部分)
import firebase, { googleProvider, facebookProvider } from "../firebase";
import * as Facebook from "expo-facebook";

const LoadingScreen = ({ navigation }) => {
  const signInWithFacebook = async () => {
    try {
      await Facebook.initializeAsync("444233602924989");
      const { type, token } = await Facebook.logInWithReadPermissionsAsync( …
Run Code Online (Sandbox Code Playgroud)

javascript facebook-authentication reactjs firebase-authentication expo

2
推荐指数
1
解决办法
3676
查看次数