Я хотел бы начать с простого приложения Grails, которое позволяет моим пользователям входить в систему через несколько поставщиков openIDConnect, таких как Google.
Итак, я начал добавлять некоторые зависимости в свой проект:
compile 'org.grails.plugins:spring-security-core:3.2.0'
compile 'org.grails.plugins:spring-security-oauth2:1.1.0'
compile 'org.grails.plugins:spring-security-oauth2-google:1.1.0'
и инициализировал spring-security
через
grails s2-quickstart com.yourapp User Role
и oauth2
через
grails init-oauth2 com.yourapp User OAuthID
затем я добавил
static hasMany = [oAuthIDs: OAuthID]
к моему User
. В application.yaml
я настроил Google в качестве поставщика аутентификации. Настройка google вроде в порядке - взята из другого проекта.
В качестве последнего шага я добавил
<oauth2:connect provider="google" id="google-connect-link">Google</oauth2:connect>
Logged with google?
<oauth2:ifLoggedInWith provider="google">yes</oauth2:ifLoggedInWith>
<oauth2:ifNotLoggedInWith provider="google">no</oauth2:ifNotLoggedInWith>
к моему index.gsp
, чтобы иметь возможность войти в систему и посмотреть, что происходит.
Все идет нормально. После успешного входа в систему с помощью Google меня перенаправляют на http://localhost:8080/oauth2/createaccount
, где я должен выбрать, хочу ли я создать нового пользователя или связать с существующим.
Если я пытаюсь создать новый, он терпит неудачу с
Class
java.lang.NullPointerException
Message
Request processing failed; nested exception is org.grails.gsp.GroovyPagesException: Error processing GroovyPageView: [views/index.gsp:60] Error executing tag <oauth2:ifLoggedInWith>: Cannot invoke method sessionKeyForAccessToken() on null object
Caused by
Cannot invoke method sessionKeyForAccessToken() on null object
(кстати: вы должны использовать надежный пароль, чтобы избежать другого сообщения об ошибке)
Grails V3.3.1 работает в Windows 10