【问题标题】:HWIOAuthBundle How get user data in controloler?HWIOAuthBundle 如何在控制器中获取用户数据?
【发布时间】:2017-02-07 16:30:49
【问题描述】:

在这个文档中存在 $response 变量 https://github.com/hwi/HWIOAuthBundle/blob/master/Resources/doc/internals/response_object_and_paths.md

但我不明白,$response 是如何到达控制器的。

请帮忙!请举个例子!

【问题讨论】:

    标签: oauth symfony


    【解决方案1】:

    您必须实现自己的自定义用户提供程序,它将使用 HWIOAuthBundle 来加载用户的数据(例如,就像您想从自己的 SQL 表中加载用户一样)。

    这是一个很好的例子:https://gist.github.com/danvbe/4476697

    还有 Symfony 的文档 How to Create a custom User Provider

    编辑

    控制器无权访问HWIOAuthBundle的UserResponseInterface,你的UserProvider有,所以如果你想访问控制器中用户的realName,你必须通过用户实体来完成。

    用户提供者:

    ...
    public function loadUserByOAuthUserResponse(UserResponseInterface $response)
    {
        $userEmail = $response->getEmail();
        $user = $this->userManager->findUserByEmail($userEmail);
    
        // if null just create new user and set it properties
        if (null === $user) {
            $realName = $response->getRealName();
            $user = new User();
            $user->setRealName($realName);
    ...
    

    控制器:

    ...
    public function defaultAction(Request $request)
    {
        $this->getUser()->getRealName();
    ...
    

    【讨论】:

    • 谢谢。我使用这个例子,但我不明白如何使用 getRealName();在默认控制器中。我应该连接哪些文件?我将非常感谢使用捆绑到控制器的方法的示例
    • 感谢@honza-rydrych 但是,即使我们不调用getRealName()方法,也有对api的请求?例如我们调用 $this->getUser()->getEmail() (来自数据库),同时对社交网络的 api 有一个请求,这个解决方案不是很有效:(
    • 我认为我们在谈论不同的事情。一件事是,当您需要对用户进行身份验证时,您必须从他们所在的位置(sqlDB 或社交网络 API)检索数据并将这些数据提供给 Symfony 的安全性 - 它必须由用户提供者完成,这就是我上面描述的.另一件事是,当您想直接在控制器的操作中使用 oAuth 时,HWIOAB 存储库中有一个很好的示例:github.com/hwi/HWIOAuthBundle/blob/master/Controller/…
    猜你喜欢
    • 1970-01-01
    • 2018-05-30
    • 2019-01-25
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多