当前位置: 移动技术网 > IT编程>开发语言>PHP > laravel5实现微信第三方登录功能

laravel5实现微信第三方登录功能

2019年05月29日  | 移动技术网IT编程  | 我要评论
背景 最近手头一个项目需要实现用户在网站的第三方登录(微信和微博),后端框架laravel5.4。 实现过程以微信网页版第三方登录,其他于此类似,在此不做重复。 准备

背景

最近手头一个项目需要实现用户在网站的第三方登录(微信和微博),后端框架laravel5.4。

实现过程以微信网页版第三方登录,其他于此类似,在此不做重复。

准备工作

网站应用微信登录是基于oauth2.0协议标准构建的微信oauth2.0授权登录系统。
在进行微信oauth2.在进行微信oauth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的appid和appsecret,申请微信登录且通过审核后,可开始接入流程。

总结下来就是:

1.进入微信开放平台注册开发者账号
2.根据项目类型创建应用,再此我创建的是网站应用.
3.接入微信登陆功能,让用户可使用微信登录你的网站应用
4.获得appid和appsectet

到此微信第三方登录的准备工作就完成了。

授权流程说明

1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
2. 通过code参数加上appid和appsecret等,通过api换取access_token;
3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

在框架中实现(laravel)

laravel socialite简介

除了传统的基于表单的登录认证外,laravel 还可以通过laravel socialite 提供 oauth 认证,目前支持的认证驱动包括 facebook、twitter、google、linkedin、github 和 bitbucket。

安装相关依赖

composer require laravel/socialite

安装weixin-web

composer require socialiteproviders/weixin-web

注意网站实现微信登录需要的依赖包为socialiteproviders/weixin-web,如果是手机端app那么可以用socialiteproviders/weixin。

shanlei@shanlei-lenovo-ideapad-110-15isk:/var/www/html/zslm_back$ composer search socialiteproviders/weixin
socialiteproviders/weixin weixin oauth2 provider for laravel socialite
socialiteproviders/weixin-web weixin-web oauth2 provider for laravel socialite
socialiteproviders/weixin-web weixin-web oauth2 provider for laravel socialite
socialiteproviders/weixin weixin oauth2 provider for laravel socialite

相关配置

1. 设置app/config.php

添加providers:

'providers' => [
socialiteproviders\manager\serviceprovider::class,
],

添加aliases:

'aliases' => [ 
 'socialite' => laravel\socialite\facades\socialite::class, 
],

2. 配置config/services.php

 'weixinweb' => [
 'client_id' => env('weixin_key'),
 'client_secret' => env('weixin_secret'),
 'redirect' => env('weixin_redirect_uri'),
 ],

3. 设置app/providers/eventserviceprovider.php

添加事件监听

use socialiteproviders\manager\socialitewascalled;
 protected $listen = [
 'socialiteproviders\manager\socialitewascalled' => [
  'socialiteproviders\weixinweb\weixinwebextendsocialite@handle',
 ],
 ];

4. 添加路由

route::get('auth/weixin', 'auto\thirdlogin\weixincontroller@redirecttoprovider');
route::get('auth/weixin/callback','auto\thirdlogin\weixincontroller@handleprovidercallback');

5. 编写weixincontroller

<?php
/**
 * created by phpstorm.
 * user: shanlei
 * date: 1/6/2017
 * time: 11:34 am
 */

namespace app\http\controllers\auto\thirdlogin;

use socialite;
use illuminate\http\request;
use app\http\controllers\controller;
use socialiteproviders\weixinweb\provider;

class weixincontroller extends controller{
 public function redirecttoprovider(request $request)
 { 
 return socialite::with('weixinweb')->redirect();
 }
 public function handleprovidercallback(request $request)
 {
 $user_data = socialite::with('weixinweb')->stateless()->user();
 dd($user_data);
 }
}

访问auth/weixin,获得返回数据。

常见错误

1. 微信授权回调域不符(redirect_uri不符),参见下面规范:​

2. 执行过程中出现一下错误:

exception 'laravel\socialite\two\invalidstateexception'
in /example/vendor/laravel/socialite/src/two/abstractprovider.php:161

解决:

通过stateless()方法禁止会话状态验证

socialite::driver('weixinweb')->stateless()->user()

总结

以上所述是小编给大家介绍的laravel5实现微信第三方登录功能,希望对大家有所帮助

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网