我在JSF应用程序中使用SocialAuth库来提供'login with google/facebook'。如下图所示,它要求我在会话中存储SocialAuthManager对象('manager'),然后重定向到'google/facebook' URL
//Create an instance of SocialAuthManager and set config
SocialAuthManager manager = new SocialAuthManager();
manager.setSocialAuthConfig(config);
// URL of YOUR application which will be called after authentication
String successUrl= "http://opensource.brickred.com/socialauthdemo/socialAuthSuccessAction.do";
// get Provider URL to which you should redirect for authentication.
// id can have values "facebook", "twitter", "yahoo" etc. or the OpenID URL
String url = manager.getAuthenticationUrl(id, successUrl);
// Store in session
session.setAttribute("authManager", manager);
然后从facebook/redirect的重定向成功/失败的会话中获取'manager',如下所示:
// get the social auth manager from session
SocialAuthManager manager = (SocialAuthManager)session.getAttribute("authManager");
// call connect method of manager which returns the provider object.
// Pass request parameter map while calling connect method.
AuthProvider provider = manager.connect(SocialAuthUtil.getRequestParametersMap(request));
// get profile
Profile p = provider.getUserProfile();
问题是,如果我已经登录到facebook或谷歌在浏览器的一个"标签",那么这工作完全OK。但如果我还没有登录,那么会话将变为NULL,因此'manager'也是如此。
换句话说,如果从"我的应用程序到facebook到我的应用程序"发生重定向,那么它就失败了。如果我已经登录到facebook,那么重定向不会发生,它的工作。
有人能帮忙吗?注意:这在IE的情况下工作得很好,但在Chrome &Mozila
这种行为的原因是您正在从不同的域调用重定向的页面,因此当页面重定向发生时,会话数据将丢失。请看这个链接
http://31stdimension.blogspot.in/2012/04/how-to-connect-facebook-using-jsfjava.html