标签: hwioauthbundle

FOSUserBundle和HWIOAuthBundle注册

我试图结合FOSUserBundle和HWIOAuthBundle之后的文章,如https://gist.github.com/danvbe/4476697.但是,我不希望自动注册OAuth2经过身份验证的新用户:应由用户提供其他信息.

期望的结果

我想为注册用户提供以下信息:

  • (用户名,虽然我宁愿只使用电子邮件)
  • 显示名称(必填)
  • 个人资料图片(必填)
  • 电子邮件地址(如果没有Facebook-id则需要)
  • 密码(如果没有Facebook-id则需要)
  • Facebook-id(如果没有电子邮件地址则需要)

现在,当用户通过Facebook进行身份验证并且用户尚不存在时,我希望注册表单填写缺失的信息(显示名称和个人资料图片).只有在此之后,才应创建新的FOSUser.在大多数教程中,个人资料图片和电子邮件地址等字段会自动填充Facebook信息.这并不总是令人满意也不可能.

此外,在创建用户之前,请考虑接受协议条款和您希望显示的规则.

可能的方法

我认为,解决方案是创建一种新的AnonymousToken,即OAuthenticatedToken,它保存相关的OAuth2信息但不计入身份验证.然后,使所有页面检查此类身份验证,并让其他页面重定向到OAuth-registration-page.然而,这对我来说似乎是一个不必要的复杂解决方案.

另一个解决方案可能是从头开始编写代码,而不是使用提到的两个bundle.我真的希望这不是必要的.

问:如何在登录流程的其余部分插入注册完成代码?

(我很想分享一些代码,但由于这是我需要帮助的概念,我没有太多要展示的.)

编辑:解决方案

继Derick的adivce之后,我得到了这样的基础知识:

自定义用户提供程序保存信息(遗憾的是,无法访问原始令牌,因此我无法在注册后登录用户):

class UserProvider extends FOSUBUserProvider {

    protected $session;

    public function __construct(Session $session, UserManagerInterface $userManager, array $properties) {
        $this->session = $session;
        parent::__construct( $userManager, $properties );
    }

    public function loadUserByOAuthUserResponse(UserResponseInterface $response)
    {
        try {
            return parent::loadUserByOAuthUserResponse($response);
        }
        catch ( AccountNotLinkedException $e ) {
            $this->session->set( 'oauth.resource', $response->getResourceOwner()->getName() );
            $this->session->set( 'oauth.id', $response->getResponse()['id'] );
            throw $e;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

定制失败处理程序

<?php
// OAuthFailureHandler.php
class OAuthFailureHandler …
Run Code Online (Sandbox Code Playgroud)

php symfony fosuserbundle hwioauthbundle

7
推荐指数
1
解决办法
2511
查看次数

Symfony 2 | HWIOAuthBundle - 如何创建自定义资源所有者?

我开始实现HWIOAuthBundle并希望创建自己的自定义资源所有者.但是我不清楚文件/目录结构.

我需要在哪里放置文件以利用捆绑包?

php symfony hwioauthbundle

6
推荐指数
1
解决办法
1749
查看次数

Symfony2:如何使用OAuth(HWIOAuthBundle)+自定义角色登录(默认情况下从DB加载)

注意:问题在本文末尾,但我将详细解释所有上下文以便更好地理解.

我正在开发一个由3个模块组成的Symfony2应用程序:

  1. 学生模块 - >需要角色ROLE_STUDENT
  2. 教师模块 - >需要角色ROLE_TEACHER
  3. 管理员模块 - >需要角色ROLE_ADMIN

角色的层次结构如下:

  • ROLE_TEACHER:[ROLE_STUDENT]
  • ROLE_ADMIN:[ROLE_TEACHER]

因此:

学生(具有ROLE_STUDENT角色)只能访问他/她模块的所有页面,例如:

教师(具有ROLE_TEACHER角色)可以访问学生模块的所有页面和教师模块的所有页面,例如:

管理员(具有ROLE_ADMIN角色)可以访问学生模块的所有页面,教师模块的所有页面和管理员后端.

系统使用OAuth使用捆绑包HWIOAuthBundle(使用提供捆绑包的 OAuthUserProvider用户提供程序)通过Twitter对学生和教师进行身份验证.

我已成功验证用户身份,但默认情况下,所有用户都会自动使用以下角色进行身份验证: [ROLE_USER,ROLE_OAUTH_USER]


所以这就是我所做的.下面,我将解释我想要的应用程序,但我不知道如何:

使用OAuth登录的步骤:

用户登录系统并自动:

  • 如果数据库中不存在该用户:
    - 将昵称保存在数据库的users表中.
    - 在数据库的users表中保存角色ROLE_STUDENT(这是我默认的角色).
    - 使用OAuth在系统中进行身份验证,但使用ROLE_STUDENT角色.

  • 如果用户存在于数据库中:
    - 检查数据库中用户关联的角色.
    - 使用OAuth在系统中验证用户,但使用数据库中关联的角色(即:ROLE_STUDENT或ROLE_TEACHER).

管理员(来自管理后端)可以查看昵称列表(由Twitter使用但保存在数据库中)以及每个昵称的已分配角色.管理员应该能够在ROLE_STUDENT和ROLE_TEACHER之间更改用户的角色.


问题:

  1. 我如何通过OAuth(HWIOAuthBundle)以默认角色(ROLE_STUDENT,如上所述)通过OAuth(HWIOAuthBundle)进行身份验证?

  2. 如果数据库中存在具有关联角色的昵称(ROLE_STUDENT或ROLE_TEACHER),我如何通过OAuth(HWIOAuthBundle)验证用户,但使用从数据库加载的角色?

我一直在阅读很多关于这个主题的内容,但我是Symfony2的新手,我不知道什么是解决它的最佳和最简单的方法.

先感谢您!

PS:如果您对任何事情有任何疑问或疑问,我将很乐意尽可能地解释.

roles symfony doctrine-orm hwioauthbundle

6
推荐指数
1
解决办法
1万
查看次数

Symfony2 - HWI/OAuthBundle找不到用户提供程序

尝试连接facebook HWI/OAuthBundle,遵循HWI/OauthBundle Doc中的所有步骤,但它返回错误

用户"HWI\Bundle\OAuthBundle\Security\Core\User\OAuthUser"没有用户提供程序

有谁能解释为什么会发生这种情况以及如何解决这个问题?

facebook symfony hwioauthbundle

6
推荐指数
1
解决办法
3039
查看次数

Symfony 3.0和HWIOAuthBundle不能一起工作?

我想在Symfony 3.0项目中安装HWIOAuthBundle.似乎存在对依赖性的限制,而HWIOAuthBundle 0.4仅适用于Symfony 3.0的早期版本.

是否有任何0.5版本的HWIOAuthBundle滚动或我是否必须用旧版本替换symfony 3.0才能使其正常工作?

我收到此错误消息:

$ composer require hwi/oauth-bundle

 Using version ^0.4.0 for hwi/oauth-bundle
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for hwi/oauth-bundle ^0.4.0 -> satisfiable by hwi/oauth-bundle[0.4.0].
    - Conclusion: remove symfony/symfony v3.0.0
    - Conclusion: don't install symfony/symfony v3.0.0
    - hwi/oauth-bundle 0.4.0 requires symfony/options-resolver ~2.3 -> satisfiable by symfony/options-resolver[v2.3.0, v2.3.1, v2.3.10, v2.3.11, v2.3.12, v2.3.13, …
Run Code Online (Sandbox Code Playgroud)

php symfony hwioauthbundle

6
推荐指数
1
解决办法
1839
查看次数

同时使用HWIOAuthBundle和LexikJWT

正如标题所示,我将使用Facebook,Google和GitHub身份验证以及JWT身份验证器(LexikJWT).

在开始之前,我想知道如何使用它们?是否可以使用它们来保护API?

如果是,我的安全性应该具有哪种配置?假设我正在使用默认配置.

这是当前的security.yml:

security:
    encoders:
        FOS\UserBundle\Model\UserInterface: sha512

    acl:
        connection: default

    access_decision_manager:
        strategy: affirmative

    role_hierarchy:
        ROLE_SALES_NOTIFICATIONS: [ ROLE_SALES_NOTIFICATIONS ]
        # FULL CONTROL
        ROLE_ADMIN:       [ROLE_USER, ROLE_SONATA_ADMIN]
        ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username_email

    firewalls:
        # Disabling the security for the web debug toolbar, the profiler and Assetic.
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false

        # -> custom firewall for the admin area of the URL
        admin:
            pattern:            /admin(.*)
            context:            user
            form_login:
                provider:       fos_userbundle
                login_path:     /admin/login
                use_forward:    false
                check_path:     /admin/login_check
                failure_path:   null …
Run Code Online (Sandbox Code Playgroud)

symfony oauth-2.0 fosuserbundle hwioauthbundle lexikjwtauthbundle

6
推荐指数
1
解决办法
357
查看次数

HWIOAuthBundle - Symfony2 - 从Facebook获取用户数据

如何从Facebook Connect获取正确的用户数据,如配置文件图片(当前返回null),名字和姓氏(似乎现在只是实现全名)?

facebook facebook-graph-api symfony fosuserbundle hwioauthbundle

5
推荐指数
1
解决办法
4816
查看次数

使用hwi/oauth-bundle连接到gmail

我正在使用hwi-oauth软件包登录社交网络帐户,但我遇到登录gmail的问题,当我已经连接到网络时,应该直接进入系统的第一个屏幕,这个在连接Facebook时发生.但是当我连接Gmail时,它总是要求允许应用程序,而不仅仅是第一次.有谁知道为什么gmail总是要求许可?这是我的系统或Gmail帐户中的设置?

gmail symfony hwioauthbundle

5
推荐指数
1
解决办法
388
查看次数

使用带有FOSUserBundle的HWIOAuthBundle时出现"无法找到用户名"错误

难倒在这里.使用HWIOAuthBundle允许在Symfony3上使用FOSUserBundle进行社交登录.

使用用户名和密码功能登录正常,但在使用社交登录(在我的情况下,Facebook和LinkedIn)进行身份验证时,会在重定向到登录页面时返回错误"无法找到用户名".

有任何想法吗?

相关文件的相关部分:

config.yml

fos_user:
    db_driver: orm
    firewall_name: main
    user_class: AppBundle\Entity\User

hwi_oauth:
    firewall_names: [secured_area]
    connect:
        account_connector: hwi_oauth.user.provider.fosub_bridge
        confirmation: true
    resource_owners:
        facebook:
            type:                facebook
            client_id:           xxx
            client_secret:       xxx
        linkedin:
            type:                linkedin
            client_id:           xxx
            client_secret:       xxx
    fosub:
        username_iterations: 30
        properties:
            facebook: facebookId
            linkedin: linkedinId
Run Code Online (Sandbox Code Playgroud)

security.yml

security:
    encoders:
        FOS\UserBundle\Model\UserInterface: bcrypt

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: ROLE_ADMIN

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt|error)|css|images|js)/
            security: false

        secured_area:
            anonymous: ~
            form_login:
                provider: fos_userbundle
                csrf_token_generator: security.csrf.token_manager
            oauth:
                resource_owners:
                    facebook:   "/login/check-facebook"
                    linkedin:   "/login/check-linkedin"
                login_path:     /login
                use_forward: …
Run Code Online (Sandbox Code Playgroud)

php symfony fosuserbundle hwioauthbundle

5
推荐指数
1
解决办法
1173
查看次数

HWIOAuthBundle - FOSUserBundle - Symfony 2 - 登录facebook后重定向到自定义路径

用户使用Facebook帐户登录后反映出以下问题:重定向到以下路由 /#_=_

我怎样才能将它重定向到这条路线:/或者更多的是这个/#

在客户端,我使用骨干.

facebook oauth symfony hwioauthbundle

4
推荐指数
2
解决办法
3920
查看次数