Java App Engine - в настоящее время используется федеративный вход в систему / Openid - как сохранить успешную аутентификацию пользователя Facebook? - PullRequest
6 голосов
/ 08 февраля 2011

У меня есть Java-приложение Google App Engine, прекрасно работающее с использованием openid / federated login.

Я сохраняю объект UserProfile, который сохраняется, когда мы вошли в систему, и пользователь сохраняет ссылку на UserService.getCurrentUser.() объект (и его идентификатор пользователя) примерно так:


    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, и у меня тоже есть эта часть.Я использую поток аутентификации на стороне сервера.Я могу завершить авторизацию и получить токен доступа, и я использую restFB.Я могу подключиться к графику API и получить все, что мне нужно.

Итак, мой вопрос таков: я не знаю, как лучше всего взять эту информацию и сообщить моему приложению, что кто-то вошел в систему.

Я полагаю, Userservice.getCurrentUser () не подходит.

Я вижу OauthService.getCurrentUser ().Это было бы замечательно, если бы он «знал», что я вошел в систему на Facebook. Тогда мои пользовательские проверки будут выглядеть так:


User user = UserService.getCurrentUser()
if(user == null)
{
    user = OAuthService.getCurrentUser();
}

и весело на моем путиЯ бы пошел.

Однако я не вижу способа зарегистрировать своего пользователя Facebook с помощью OAuthService или чего-либо еще.

Я уверен, что это было сделано раньше.

Как я должен идти об этом?Есть ли симпатичный способ сделать это, или я застрял, включив сеансы и создавая пользовательский объект для моего пользователя Facebook и вставляя его в сеанс и запуская фильтр?

1 Ответ

3 голосов
/ 08 февраля 2011

Вам нужно будет включить сеансы и сохранить соответствующую информацию о входе пользователя в сеанс.Вы можете настроить вещи так, чтобы данные сеанса не загружались для пользователей, которые вошли в систему с использованием OpenID.Я не уверен, хотя, потому что я не слишком знаком с Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...