对本节中 AuthorizationsController 控制器下 socialStore 的疑问和不懂?

这个if语句已经判断过传递过来的$type是否是微信。(下图)
file
感觉这两个判读没有什么用处,太重复了!(下图)
file
file
求解答

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
liyu001989
最佳答案
        if (!in_array($type, ['weixin'])) {
            return $this->response->errorBadRequest();
        }

这里是判断路由参数是否正确,比如支持微信和微博 !in_array($type, ['weixin', 'weibo'])

            if ($code = $request->code) {
                    $response = $driver->getAccessTokenResponse($code);
                    $token = array_get($response, 'access_token');
            } else {
                $token = $request->access_token;

                if ($type == 'weixin') {
                    $driver->setOpenId($request->openid);
                }
            }

只有微信特殊的oauth流程中增加了openid的逻辑,所以单独判断,其他大部分第三方登录都不需要。所以增加单独的逻辑。

最后根据不用的第三方,查询用户,保存用户信息的逻辑也不同,例如微信,就有 openid 和 unionid 的逻辑,所以单独写各自的逻辑。

如果你有更好的实现,可以贴代码出来,大家讨论一下

5年前 评论
讨论数量: 9

三个判断分别在不同的操作时所进行的判断。如果觉得多余,就需要将所有操作写在一个 if 下面。
问题来了,这里如果还有QQ登陆,就需要将微信 if 当中的操作照搬到 QQ 登陆中,如果有更多登陆方式就需要创建更多相同的步骤。
你可以体会一下这个逻辑。

5年前 评论
liyu001989
        if (!in_array($type, ['weixin'])) {
            return $this->response->errorBadRequest();
        }

这里是判断路由参数是否正确,比如支持微信和微博 !in_array($type, ['weixin', 'weibo'])

            if ($code = $request->code) {
                    $response = $driver->getAccessTokenResponse($code);
                    $token = array_get($response, 'access_token');
            } else {
                $token = $request->access_token;

                if ($type == 'weixin') {
                    $driver->setOpenId($request->openid);
                }
            }

只有微信特殊的oauth流程中增加了openid的逻辑,所以单独判断,其他大部分第三方登录都不需要。所以增加单独的逻辑。

最后根据不用的第三方,查询用户,保存用户信息的逻辑也不同,例如微信,就有 openid 和 unionid 的逻辑,所以单独写各自的逻辑。

如果你有更好的实现,可以贴代码出来,大家讨论一下

5年前 评论

@韩槑槑 第一个if语句如果不是微信就会返回了啊,根本就不会再向下执行了啊!反之满足了,下面没有在判断的必要了吧?

5年前 评论

@MCyunpeng98 那如果是QQ登陆怎么办?GitHub登陆怎么办?如果只有微信登陆他根本没必要写这个

5年前 评论

@韩槑槑 他是把所有的第三方登录都写进这个方法里?我我我一直理解是一个地三方登录写一个方法,毕竟没个第三方登录需求不一样 想GitHub完全不需要code的

5年前 评论

@MCyunpeng98 type 是个变量啊,不是定值。

5年前 评论

@韩槑槑 懂了,谢谢
@liyu001989 嗯嗯 懂了 是我了理解错了 ,谢谢

5年前 评论
liyu001989

一种三方登录一个方法,完全可以,按照你觉得合理的方式实现即可。github 完全不需要 code? 请再理解一下 Oauth 2.0 的 授权码模式https://learnku.com/courses/laravel-advanc...

5年前 评论

@liyu001989 迷过来了,感谢!平常上课想来社区逛逛,浏览器好不爽,app什么时候上线啊?

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!