1

我正在使用SCRIBE库在我的应用程序中启用 Facebook 连接登录。我的问题是,每次我点击登录按钮登录并获取 access_token 后,我都在未经授权的情况下登录,因为我已登录 Facebook 并且 access_token 仍然处于活动状态。有没有办法强制 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/。我知道关于这个话题有很多问题,但所有这些问题和建议的解决方案都让我感到困惑。这是处理 Facebook 响应的托管 bean 中的 my post 构造方法。

@PostConstruct public void init() { FacesContext context = 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();
    }
4

1 回答 1

0

您有多种选择:

  1. 将您的注销按钮绑定到 Facebook Javascript SDK 的 FB.logout() 函数。这也可能会导致用户退出 Facebook.com 的副作用(因为您的应用程序可能一开始就负责让他们登录)
  2. 使用带有 HTTP DELETE 和用户访问令牌的 /me/permissions Graph API 端点来撤销该用户对您的应用程序的权限。这里的缺点是用户下次登录您的应用程序时必须再次重新进行身份验证(并再次查看登录对话框)。
  3. 存储一个告诉您某人已登录的会话变量。当他们注销时删除该变量并存储另一个表明他们已手动注销的会话变量。然后,如果存在第二个变量,在他们单击您应用程序中的登录按钮之前,不要自动重新验证它们。
于 2012-11-02T17:24:09.433 回答