java - 如何在 Java 中使用 facebook connect 和 scribe 库注销用户?

标签 java facebook authentication openid

我正在使用 SCRIBE 库在我的应用程序中启用 Facebook 连接登录。我的问题是,每次点击登录按钮登录并获取 access_token 后,我都会在未经授权的情况下登录,因为我已登录 Facebook 并且 access_token 仍然处于 Activity 状态。有没有办法强制 facebook 退出或每次都要求我提供新的 access_token,使用 cookie 或使用 connect.facebook.net/en_US/all.js 是一个好主意,或者只是在某个时候重定向它至https://www.facebook.com/logout.php?access_token=appId&confirm=1&next=http://localhost:8080/ 。我知道关于这个主题有很多问题,但所有这些问题和建议的解决方案都让我感到困惑。这是我在托管 bean 中处理 Facebook 响应的 post 构造方法。

@PostConstruct 公共(public)无效初始化(){ FacesContext 上下文 = FacesContext.getCurrentInstance(); HttpServletRequest req = (HttpServletRequest) 上下文 .getExternalContext().getRequest();

    responseCode = req.getParameter("code");
    System.out.println("The code is:   "+responseCode);


    //facebook data
    final String PROTECTED_RESOURCE_URL = "https://graph.facebook.com/me";
    final Token EMPTY_TOKEN = null;
    String apiKey = "MY_API_KEY";
    String apiSecret = "MY_API_SECRET";
    String callbackUrl="the-redirect_page_in_my_application";

    OAuthService service = new ServiceBuilder().provider(FacebookApi.class)
            .apiKey(apiKey).apiSecret(apiSecret)
            //.scope(SCOPE)
            .callback(callbackUrl).build();

    //get authorization Url
    String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN);

    Verifier v=new Verifier(responseCode);
    Token accessToken = service.getAccessToken(EMPTY_TOKEN, v);


    // Now let's go and ask for a protected resource!

    OAuthRequest request = new OAuthRequest(Verb.GET,
            PROTECTED_RESOURCE_URL);
    service.signRequest(accessToken, request);
    Response response = request.send();


    Gson gson = new GsonBuilder().create();
    FacebookUser faceUser = gson.fromJson(response.getBody(), FacebookUser.class);

    setUserName(faceUser.getName());
    setUserFacebook(faceUser.getUsername());
    setGender(faceUser.getGender());

    FacesContext.getCurrentInstance().responseComplete();
    }

最佳答案

您有多种选择:

  1. Tie your Logout button to the Facebook Javascript SDK's FB.logout() function.这可能会产生不良的副作用:记录 Facebook.com 之外的用户(因为您的应用程序可能已被 首先负责他们登录)
  2. Use the /me/permissions Graph API endpoint with an HTTP DELETE and a user access token to revoke permissions for that user for your app.这样做的缺点是,用户下次登录您的应用时必须重新进行身份验证(并且也会再次看到登录对话框)。
  3. 存储一个 session 变量,告诉您有人已登录。当他们注销时删除该变量,并存储另一个 session 变量来指示他们已手动注销。然后,如果第二个变量存在,则不要自动重新验证它们,直到他们单击应用程序中的登录按钮。

关于java - 如何在 Java 中使用 facebook connect 和 scribe 库注销用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13198748/

相关文章:

php - 阻止一个人创建多个帐户的最佳方法

ios - 验证从 iOS 到后端的通信

java - 在ADT中定义FlatButton setOnClickListener

java - 处理 OAuth2 回调时出现异常 (null)。 Spring Social Facebook 登录

java - 使用 Betamax 时为 "Illegal use of nonvirtual function call"

ios - Facebook iOS SDK 3.0 贴墙

c# - Facebook SDK for .NET 登录按钮、注销代码

html - 为什么 chrome 无法识别此登录表单?

java - 在firefox中的java小程序中查看word office文档

Java 8 List to EnumMap with sums