我的 Google App Engine Java 应用程序使用 openid/federated login 运行良好。
我保存一个 UserProfile 对象,一旦我们有一个登录用户保存对 UserService.getCurrentUser() 对象(及其用户 ID)的引用,我就会保留该对象,如下所示:
UserService userService = UserServiceFactory.getUserService();
user = userService.getCurrentUser();
userId = user.getUserId();
profile = UserProfileBin.getInstance().getByUserId(user.getUserId());
if (profile == null) {
profile = new UserProfile();
profile.setUser(user);
profile.setUserId(user.getUserId());
profile.setCreatedDate(new Date());
pm.makePersistent(profile);
id = profile.getId().getId();
}
...
好吧,一切都非常顺利。我正在使用 openId 选择器并使用一堆不同的 openid 提供程序登录到应用程序。没有问题。
现在,我想让人们使用他们的 facebook 登录,我也有这部分。我正在使用服务器端身份验证流程。我能够完成授权并检索访问 token ,并且我正在使用 restFB。我可以连接到图形 API 并获得我需要的任何东西。
所以我的问题是:我不知道获取此信息并让我的应用知道有人已登录的最佳方法是什么。
我认为 Userservice.getCurrentUser() 是不行的。
我看到 OauthService.getCurrentUser()。如果那个“知道”我有一个 Facebook 用户登录,那就太棒了。然后我的用户检查将按照以下方式进行:
User user = UserService.getCurrentUser()
if(user == null)
{
user = OAuthService.getCurrentUser();
}
我会愉快地走在路上。
但是,我没有找到使用 OAuthService 或其他方式注册我的 Facebook 用户的方法。
我确定以前有人这样做过。
我该怎么办?有没有一种可爱的方法可以做到这一点,或者我是否坚持打开 session 并为我的 Facebook 用户创建自定义用户对象并将其粘贴在 session 中并运行过滤器?
最佳答案
您需要启用 session 并在 session 中存储有关用户登录的相关信息。您可以配置一些东西,以便不为使用 OpenID 登录的用户加载 session 数据。不过,我不确定,因为我对 Java 不是很熟悉。
关于java - App Engine Java - 当前使用联合登录/Openid - 我应该如何保留成功通过身份验证的 Facebook 用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4929247/