当前位置: 首页 > 知识库问答 >
问题:

Grails Spring Security Facebook插件-连接按钮不会重定向到Facebook

卫松
2023-03-14

我已成功使用Spring安全登录进行注册。现在我想通过Spring安全脸书插件实现登录并注册脸书帐户。

我成功地运行了(演示应用程序),但当我尝试遵循文档时,我不会在自己的应用程序中被引导到Facebook进行登录,但始终会:

http://localhost:8080/MYAPP/j_spring_security_facebook_redirect

因为我使用的是maven,所以我的依赖项在pom.xml中,相关部分如下所示:

<dependency>
        <groupId>org.grails.plugins</groupId>
        <artifactId>spring-security-core</artifactId>
        <version>2.0-RC4</version>
        <scope>compile</scope>
        <type>zip</type>
    </dependency>

    <dependency>
        <groupId>org.springframework.social</groupId>
        <artifactId>spring-social-core</artifactId>
        <version>1.1.0.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.social</groupId>
        <artifactId>spring-social-facebook</artifactId>
        <version>2.0.1.RELEASE</version>
    </dependency>

    <!-- Facebook Spring Social Plugin -->
    <dependency>
        <groupId>org.grails.plugins</groupId>
        <artifactId>spring-security-facebook</artifactId>
        <version>0.17</version>
        <type>zip</type>
    </dependency>

我还实现了FacebookUser域:

class FacebookUser {

long uid
String accessToken
Date accessTokenExpires

static belongsTo = [User]

static constraints = {
    uid unique: true
}

/* static mapWith = "mongo" */
}

在我的视图中,我有以下连接按钮的代码:

<facebookAuth:connect />

还有我的配置:

grails {
plugin {
    springsecurity {
        facebook {
            domain.classname='de.<MYDOMAIN>.<MYAPP>.FacebookUser'
            host='<MYDOMAIN>.de'

            domain.appUserConnectionPropertyName = 'User'
            appId = "<MYFBAPPID>"
            secret = "<MYFBSECRET>"

因此,我不明白“j_spring_security_facebook_redirect”的映射在演示应用程序中的哪个位置完成,并且我的应用程序中缺少的内容确实打开了Facebook网站而不是 http://localhost:8080/MYAPP/j_spring_security_facebook_redirect

谢谢你的提示!

更新:

问题似乎出在我的Config.groovy中,因为如果我删除已配置的providerNames和filterNames,它可以工作,但是如果有需要的配置,我不能删除它们,需要添加缺少的过滤器和提供者。

graisl.plugin.springsecurity.providerNames = ['...', '...']
graisl.plugin.springsecurity.filterChain.filterNames = ['...', '...']

我用所需的过滤器和提供商数据更新了它们(将它们记录在演示应用程序中),但没有找到它们:

providerNames = [
                'tokenAuthenticationProvider',
                'daoAuthenticationProvider',
                'rememberMeAuthenticationProvider',
                'FacebookAuthProvider'
        ]

        filterChain.filterNames = [
                'securityContextPersistenceFilter',
                'logoutFilter',
                'authenticationProcessingFilter',
                'tokenAuthenticationFilter',
                'basicAuthenticationFilter',
                'rememberMeAuthenticationFilter',
                'anonymousAuthenticationFilter',
                'exceptionTranslationFilter',
                'filterInvocationInterceptor',
                /* Facebook Security Filters */
                'MutableLogoutFilter',
                'FacebookAuthRedirectFilter',
                'RequestHolderAuthenticationFilter',
                'SecurityContextHolderAwareRequestFilter',
                'GrailsRememberMeAuthenticationFilter',
                'GrailsAnonymousAuthenticationFilter',
                'ExceptionTranslationFilter',
                'FilterSecurityInterceptor'
        ]

启动错误:

ERROR context.GrailsContextLoaderListener  - Error initializing the  application: No bean named 'FacebookAuthProvider' is defined

消息:未定义名为“FacebookAuthProvider”的bean

共有1个答案

薛博赡
2023-03-14

终于解决了,这是我的相关配置.groovy的圣杯.plugin.Spring安全...现在:

            providerNames = [
                'tokenAuthenticationProvider',
                'daoAuthenticationProvider',
                'rememberMeAuthenticationProvider',
                /* Facebook Security Provider */
                'facebookAuthProvider'
        ]

        filterChain.filterNames = [
                'securityContextPersistenceFilter',
                'logoutFilter',
                'authenticationProcessingFilter',
                'tokenAuthenticationFilter',
                'basicAuthenticationFilter',
                'rememberMeAuthenticationFilter',
                'anonymousAuthenticationFilter',
                'exceptionTranslationFilter',
                'filterInvocationInterceptor',
                /* Facebook Security Filters */
                'facebookAuthRedirectFilter',
                'securityContextHolderAwareRequestFilter',
                'exceptionTranslationFilter',
        ]
 类似资料:
  • 我有一个订单按钮应该是重定向用户到购物车页面与订购的项目 这是网上的路线。php 这是函数addToCart 但是当我点击按钮时,它不会重定向到购物车页面,它会一直加载到我所做的同一个位置 在函数上,它输出正确的结果

  • 我有一个sidR菜单,内容如下: 每个页面的href未知,cms会为其提供一个id。 虽然a class=“sidr class”下拉开关 我想用CSS隐藏sidr类下拉菜单的内容,只显示一个类“sidr类下拉开关”,这样它就可以点击第一个链接。

  • 我一直在跟一门课,但似乎没有奏效(也可能是我太糟糕了,搞错了什么东西)。 我应该在contenidoactivity.java中输入一个名称,然后按下一个按钮(onclick:enviarNombre被选中),并将该名称获取到destinoactivity.java txt,但它只是停留在那里,当我单击该按钮时,它没有改变任何东西。我已经放了一个吐司“has seleccionado enviar

  • 所以我现在做了一个应用程序,我使用侧菜单来实现一些功能,比如注销,设置等。当用户需要注销时,我不得不将他重定向到LoginActivity,出于某种原因,它只是关闭侧菜单,就像没有那个项目一样。我在这里和youtube上都找过类似的问题,但没有任何帮助。而且,当按下侧菜单上的“logout_btn”时,该应用程序似乎没有错误 side_nav_menu:

  • 问题内容: 我正在使用React和bootstrap开发Web应用程序。当应用按钮onClick时,我很难让我的页面重定向到另一个页面。如果在href之后,我无法进入另一个页面。 所以,请您告诉我是否有必要使用React-navigation或其他通过Button onClick来导航页面? 问题答案: React Router v5.1.2:

  • 我使用woocommerce插件创建了一个电子商务。我只出售订阅,因此“/cart/”页面没有用处。我试图摆脱它,这样当我的客户点击“添加到购物车”按钮时,他就会出现在结帐页面上。