Laravel5.1 实现第三方登录认证教程之 – 微信登录

Laravel5.1 实现第三方登录认证教程之 – 微信登录

https://laravel-china.org/topics/2451/laravel51-implementation-of-the-third-party-login-authentication-tutorial-wechat-login

前言

近期开发了 PHPHub 的网站应用微信登录,因此编写此文记录开发的过程,希望能帮助到有同样需求的同学。

文章概览

  1. 准备工作;
  2. 集成 Package;
  3. 代码调用。

接下来是详细解说。

准备工作

首先到微信开放平台申请相关的 网站应用,用以获取接口所需的 AppID 和 AppSecret。

一般来说需要花费 3 – 5 个工作日。

file

集成 Package

我们使用 laravel/socialite 扩展包来进行 OAuth 认证,它提供了完整且上手毫无难度的 OAuth 解决方案。

在此基础上使用其 Driver 扩展 socialiteProviders/weixin 来完成微信的 OAuth 认证流程。

1. 安装 laravel/socialite

如果你已经安装过此 Package,则可以跳过此步骤。

1). 直接运行以下命令安装扩展包

composer require laravel/socialite

2). 在你的 config/app.php 文件中添加以下配置信息

'providers' => [
    ...
    // 注意:下文中要集成 Socialite Driver 扩展,因此将会删除此行配置。
    Laravel\Socialite\SocialiteServiceProvider::class,
],

'aliases' => [
    ...
    'Socialite' => Laravel\Socialite\Facades\Socialite::class,
],

2. 安装 socialiteProviders/weixin

1). 直接运行以下命令安装扩展包

composer require socialiteproviders/weixin

2). 在你的 config/app.php 文件中添加以下配置信息

'providers' => [
    ...
    # 注意:如果你之前已经安装了 laravel/socialite,则务必删除掉下面的配置
    // 删除这行配置 Laravel\Socialite\SocialiteServiceProvider::class,

    # 新增配置
     \SocialiteProviders\Manager\ServiceProvider::class,
],

3). 在你的 app/Providers/EventServiceProvider.php 文件中添加以下事件处理器

protected $listen = [
    \SocialiteProviders\Manager\SocialiteWasCalled::class => [
        'SocialiteProviders\Weixin\WeixinExtendSocialite@handle',
    ],
];

3. 添加配置

1). 在你的 .env 文件中添加以下配置

WEIXIN_KEY=你的AppID
WEIXIN_SECRET=你的AppSecret
WEIXIN_REDIRECT_URI=你的回调地址

# 例如
WEIXIN_KEY=wxba52fab0726b9023
WEIXIN_SECRET=xxxxxxxxxxxxxxxxxx
WEIXIN_REDIRECT_URI=https://laravel-china.org/auth/callback?driver=wechat

2). 在你的 config/services.php 文件中添加以下配置

'weixin' => [
   'client_id'     => env('WEIXIN_KEY'),
   'client_secret' => env('WEIXIN_SECRET'),
   'redirect'      => env('WEIXIN_REDIRECT_URI'),

   # 这一行配置非常重要,必须要写成这个地址。
   'auth_base_uri' => 'https://open.weixin.qq.com/connect/qrconnect',
],

至此,安装全部完成。

代码调用

准备工作都完成以后,现在就到了接口对接阶段。

1). 添加路由

# 用户点击登录按钮时请求的地址
Route::get('/auth/oauth', 'Auth\AuthController@oauth');

# 微信接口回调地址
Route::get('/auth/callback', 'Auth\AuthController@callback');

2). 在你的 app/Http/Controllers/Auth/AuthController.php 文件里添加以下方法

# 用户点击微信登录按钮后,调用此方法请求微信接口
public function oauth(Request $request)
{
    return \Socialite::with('weixin')->redirect();
}

# 微信的回调地址
public function callback(Request $request)
{
    $oauthUser = \Socialite::with('weixin')->user();

    // 在这里可以获取到用户在微信的资料
    dd($oauthUser);

    // 接下来处理相关的业务逻辑

    ...

}

 

下图是打印 oauthUser 的结果,供大家参考

file

至此,已经能获取到用户的微信资料了,接下来你们就可以根据此数据处理自己的相关业务逻辑了。

在这里值得一提的是,我们通过微信的 unionid 来记录用户的信息,而不是 openid。因为针对一个微信开放平台帐号下的应用,同一用户的 unionid 是相同的,这样方便我们以后做多站点的用户数据统一。

附录

网站应用微信登录开发指南

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/113045.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • log库spdlog简介及使用[通俗易懂]

    log库spdlog简介及使用[通俗易懂]spdlog是一个开源的、快速的、仅有头文件的C++11日志库,code地址在https://github.com/gabime/spdlog,目前最新的发布版本为0.14.0。它提供了向流、标准输出、文件、系统日志、调试器等目标输出日志的能力。它支持的平台包括Windows、Linux、Mac、Android。spdlog特性:(1)、非常快,性能是它的主要目标;(2)、仅包括…

    2022年6月23日
    51
  • idea2019激活码永久_在线激活

    (idea2019激活码永久)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月28日
    2.6K
  • rpm 安装冲突「建议收藏」

    rpm 安装冲突「建议收藏」1.要安装的包比已安装的包旧,则采用降级的方式安装 rpm -Uvhkpartx-0.4.9-72.el6.x86_64.rpm –oldpackage 2.安装的包比已安装的包新,则直接升级即可 rpm -Uvhkpartx-0.4.9-72.el6.x86_64.rpm  或者末尾追加 –replacefiles  或  –repl…

    2022年5月5日
    37
  • 面试被问到HashMap 底层原理?看完这边文章绝对不慌!

    面试被问到HashMap 底层原理?看完这边文章绝对不慌!快速入门存储:put方法put(key,value)查询:get方法get(key)java代码如下importjava.util.HashMap;importjava.util.Map;publicclassApp{publicstaticvoidmain(String[]args){Map<String,String>map=newHashMap<>();map.put(“刘一”,

    2022年5月19日
    38
  • 机器人手眼标定详解

    机器人手眼标定详解手眼标定详解研究现状所谓手眼标定是统一视觉系统和机器人的坐标系,从而可以使视觉系统所确定的物体位姿可以转换到机器人坐标系下,由机械臂完成对物体的作业。最常见的手眼系统包括Eye-to-Hand和Eye-in-Hand两种。在Eye-to-Hand手眼系统中,摄像机与机器人基座的位置是相对固定的,手眼关系式求解摄像机坐标系与机器人基座坐标系之间的转换关系。在Eye-in-Hand手眼系统中,摄像机由于固定在机械臂末端,手眼关系求解的是摄像机坐标系与机械臂末端坐标系之间的转换关系。在机器人处于不同的位置和

    2022年5月2日
    31
  • python查看pkl文件保存模型参数_python 文件路径

    python查看pkl文件保存模型参数_python 文件路径#show_pkl.pyimportpicklepath=’E:/somecode/Faster-RCNN-TensorFlow\default/voc_2007_trainval/default/vgg16_faster_rcnn_iter_10000.pkl’#path=’/root/……/aus_openface.pkl’pkl文件所在路径f=open(path,’rb’)data=pickle.load(f)print(data)print(len(

    2025年8月30日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号