使用 Grails 创建 Google 登录

Posted

技术标签:

【中文标题】使用 Grails 创建 Google 登录【英文标题】:Creating a Google Login using Grails 【发布时间】:2015-05-12 01:44:53 【问题描述】:

我正在尝试在 Grails 项目中创建 Google 登录选项。我是 Grails 的新手,正在使用 2.4.4 版本,因为这是安装时的最新版本。在大量搜索 Grails 插件之后,我将最后 4 行添加到了我的 BuildConfig.groovy 文件中:

    plugins 
    // plugins for the build system only
    build ":tomcat:7.0.55"

    // plugins for the compile step
    compile ":scaffolding:2.1.2"
    compile ':cache:1.1.8'
    compile ":asset-pipeline:1.9.9"

    // plugins needed at runtime but not for compilation
    runtime ":hibernate4:4.3.6.1" // or ":hibernate:3.6.10.18"
    runtime ":database-migration:1.4.0"
    runtime ":jquery:1.11.1"

    // Uncomment these to enable additional asset-pipeline capabilities
    //compile ":sass-asset-pipeline:1.9.0"
    //compile ":less-asset-pipeline:1.10.0"
    //compile ":coffee-asset-pipeline:1.8.0"
    //compile ":handlebars-asset-pipeline:1.3.0.3"

    // added these...
    compile ':spring-security-core:2.0-RC4'
    compile ':spring-security-oauth:2.1.0-RC4'
    compile ':spring-security-oauth-google:0.3.1'


我已将以下块添加到我的 Config.groovy 文件中:

oauth 
providers 
    google 
        api = org.grails.plugin.springsecurity.oauth.GoogleApi20 
        key = app id
        secret = secret key
        successUri = '/oauth/google/success'
        failureUri = '/oauth/google/error'
        callback = "$baseURL/oauth/google/callback"
        scope = 'https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email'
    
    debug = true
    connectTimeout = 5000
    receiveTimeout = 5000

我还运行了“grails s2-init-oauth”并创建了一个“OAuthID”类。但是,当我运行我的应用程序时,我收到一条错误消息...

Error creating bean with name 'oauthService': Invocation of init method failed; nested exception is groovy.lang.MissingPropertyException: No such property: key for class: java.lang.Boolean

有没有人遇到过这个问题并可以提出解决办法?在这一点上,即使是对导致错误消息的原因的解释也会对我有所帮助?

【问题讨论】:

尝试刷新依赖命令 - grails refresh-dependencies 试过了,谢谢,但没有用。 【参考方案1】:

我还使用 Google 创建了登录。为此,我使用了 Oauth 插件

为此,我在 BuildConfig.groovy 中添加了

compile ":oauth:2.1.0"

在 Config.groovy 中,

oauth 
    providers 
        google 
            api = org.scribe.builder.api.GoogleApi
            key = '583594517530-72ipieehn58c5160rvgdsodjgiifoedn.apps.googleusercontent.com'
            secret = 'pBtTg2j_EfanwNhuuAIDWW48'
            scope ='https://www.googleapis.com/auth/userinfo.email'
            callback = "http://localhost:8080/googleAuthen/oauth/google/callback"
            successUri = "http://localhost:8080/googleAuthen/oauthCallBack/google"

        
    

你可以在this github repo看到完整的代码。

Oauth 插件的文档是here。

【讨论】:

感谢您的帮助。我尝试了你的方法,它似乎有效(只要我使用你的密钥和秘密),但这不使用谷歌下个月逐步淘汰的版本 1 吗? 是的,它使用 oauth1。我还没有尝试过oauth2。需要看看。 我能够使用基于 @Ramsharan 提供的代码的 GoogleApi20 让 oauth2 “工作”。我需要确保回调 URI 以 /oauth/google/callback 结尾,以便存储会话密钥。我只是通过创建一个全新的项目然后编辑 Build.Config 文件来摆脱原来的错误。我仍然不知道原始项目中有什么问题。我现在遇到的问题是弄清楚如何处理我检索到的令牌,s2o 标签库不起作用,但我想这是另一个问题。 @user3042437 感谢 GoogleApi20。【参考方案2】:

这是因为您在配置中使用了 debug = true。这在配置属性中不存在。

【讨论】:

以上是关于使用 Grails 创建 Google 登录的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Groovy/Grails 上实现社交网络登录? [关闭]

Grails/Spring Security:无法使用新创建的用户登录

sh Bash:goo.gl#使用Google URL Shortener服务(http://goo.gl)缩短网址。

使用服务帐户 Google BigQuery API 时出现登录要求错误

如何使用GoogleServiceAuthentication类将文件上传到Grails中的google存储?

Grails - Spring Security 帐户创建