Использование безопасных социальных сервисов без использования их представлений

Я начал интегрировать SecureSocial в свое приложение play/scala, но мне не очень нравятся все перенаправления, которые он делает между разными представлениями.

пример - попробуйте войти со страницы входа по умолчанию, и если вы введете неправильный пароль, вы будете перенаправлены на другую страницу (url), но с той же формой входа. единственное, что отличается, это то, что есть сообщение об ошибке...

Мне нужна простая форма входа (поставщик пароля/пользователя) в углу моей главной страницы, которая отправляет свои данные с помощью ajax, эти данные проверяются на сервере, и делается ответ либо для отображения сообщений об ошибках, либо для изменения окна. место нахождения. Рядом с этой формой я помещу ссылку для перехода на более продвинутую страницу входа, которая добавляет возможность использовать других провайдеров, таких как fb/twitter и т. д. Но с этой страницы я также хочу использовать ajax для отправки данных и получения ответа. .

Я попытался просмотреть источник SecureSocial, но немного заблудился.

Может ли кто-нибудь дать мне представление о том, как использовать SecureSocial, но без использования каких-либо его представлений?

ПРИМЕЧАНИЕ. Меня не интересует настройка их представлений. Это не просто проблема CSS/дизайна, я хочу обрабатывать данные для входа в систему Ajaxly, а не с обычной отправкой формы с последующим перенаправлением...


person samz    schedule 19.01.2013    source источник


Ответы (1)


Еще немного покопавшись в коде SecureSocial, я лучше понял, как он работает.

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

Мне понравилось, как класс SecureSocial ProviderController динамически решает, какой провайдер использовать, на основе параметра. Но мне не понравились его ответы - перенаправление. Я хотел ответить на запрос ajax с некоторыми данными и позволить js на стороне клиента обработать его.

Это мое решение:

в значительной степени скопируйте весь код ProviderController в мой собственный файл Auth.scala (контроллер). Изменены перенаправления, связанные с «case ex, case _», сохранено перенаправление при успешной аутентификации, поскольку он добавляет сеансовый ключ SecureSocial, связанный с пользователем. Удалены все маршруты, связанные с SecureSocial, из моего файла маршрутов. Поместите дополнительное скрытое поле с типом входа (userpass/google/fb/etc...) и настройте мой логин ajax для отправки его вместе с сообщением на мой контроллер аутентификации.

Если вам нужна дополнительная информация, прокомментируйте здесь, и я отредактирую ответ.

person samz    schedule 21.01.2013
comment
Мне интересно... в основном, потому что я показываю экран входа в систему во всплывающем окне, и если пользователь входит в систему или отменяет ее, я не хочу перезагружать страницу (и терять ввод пользователя)... Я просто хочу чтобы закрыть всплывающее окно и обновить состояние входа, если это необходимо. Думаю, для этого мне нужен логин Ajax. - person User; 24.08.2013
comment
Извините за несколько поздний комментарий. Да, вам нужен ajax и безопасные социальные сети с обычными запросами страниц и перенаправлениями... в конце концов я перестал их использовать и создал пару собственных классов аутентификации, вдохновленных модулем auth20. Это не слишком сложно и наиболее гибко :) - person samz; 02.09.2013
comment
У меня точно такая же проблема. Я хочу удалить все HTML-шаблоны из моего приложения Play (включая пользовательские шаблоны SecureSocial) и заменить их JSON/JavaScript. Я начал немного перерабатывать исходники SecureSocial... но поскольку мне просто нужен поставщик имени пользователя/пароля, я думаю, что стоит создать собственное решение. Не могли бы вы дать мне несколько советов о том, как вы решили проблему? Есть ли хороший учебник или образец, который мог бы помочь мне написать достойный API аутентификации? Спасибо. - person j3d; 21.10.2013
comment
Вы столкнулись с проблемой с java.lang.ClassNotFoundException: securesocial.controllers.ReverseProviderController. Я последовал вашему совету и скопировал файл ProviderController. Вход в систему с правильными учетными данными теперь работает, но если учетные данные неверны, SecureSocial пытается создать экземпляр этого сгенерированного класса, который по какой-то причине не создается сейчас (хотя я сохранил ссылку на него в моем файле маршрутов). - person glidester; 11.07.2014