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のmypostconstructメソッドです。

@PostConstruct public void init(){FacesContext context = FacesContext.getCurrentInstance(); HttpServletRequest req =(HttpServletRequest)context .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. ログアウトボタンをFacebookJavascriptSDKのFB.logout()関数に関連付けます。これには、Facebook.comからユーザーをログアウトさせるという望ましくない副作用もあります(アプリが最初にログインする責任を負っていた可能性があるため)
  2. / me /permissionsグラフAPIエンドポイントをHTTPDELETEとユーザーアクセストークンとともに使用して、アプリに対するそのユーザーの権限を取り消します。ここでの欠点は、ユーザーが次回アプリにログインするときに再認証する必要があることです(また、ログインダイアログも表示されます)。
  3. 誰かがログインしていることを示すセッション変数を保存します。ログアウト時にその変数を削除し、手動でログアウトしたことを示す別のセッション変数を保存します。次に、その2番目の変数が存在する場合は、アプリのログインボタンをクリックするまで、それらを自動的に再認証しないでください。
于 2012-11-02T17:24:09.433 に答える