您现在的位置是:网站首页> 内容页

laravel5实现第三方登录(微信)

  • wwwsalon365net
  • 2019-05-28
  • 92人已阅读
简介背景最近手头一个项目需要实现用户在网站的第三方登录(微信和微博),后端框架laravel5.4。实现过程以微信网页版第三方登录,其他于此类似,在此不做重复。 准备工作网站应用微信登录是

背景

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

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

 

准备工作

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

总结下来就是:

    进入微信开放平台注册开发者账号根据项目类型创建应用,再此我创建的是网站应用.接入微信登陆功能,让用户可使用微信登录你的网站应用获得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/weixinsocialiteproviders/weixin Weixin OAuth2 Provider for Laravel Socialitesocialiteproviders/weixin-web Weixin-Web OAuth2 Provider for Laravel Socialitesocialiteproviders/weixin-web Weixin-Web OAuth2 Provider for Laravel Socialitesocialiteproviders/weixin Weixin OAuth2 Provider for Laravel Socialite

相关配置

1. 设置app/config.php

添加providers:

"providers" => [ SocialiteProvidersManagerServiceProvider::class,],

添加aliases:

"aliases" => [ "Socialite" => LaravelSocialiteFacadesSocialite::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 SocialiteProvidersManagerSocialiteWasCalled; protected $listen = [ "SocialiteProvidersManagerSocialiteWasCalled" => [ "SocialiteProvidersWeixinWebWeixinWebExtendSocialite@handle", ], ];4. 添加路由

Route::get("auth/weixin", "AutoThirdLoginWeixinController@redirectToProvider");Route::get("auth/weixin/callback","AutoThirdLoginWeixinController@handleProviderCallback");

5. 编写WeixinController

<?php/** * Created by PhpStorm. * User: shanlei * Date: 1/6/2017 * Time: 11:34 AM */namespace AppHttpControllersAutoThirdLogin;use Socialite;use IlluminateHttpRequest;use AppHttpControllersController;use SocialiteProvidersWeixinWebProvider;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 "LaravelSocialiteTwoInvalidStateException" in /example/vendor/laravel/socialite/src/Two/AbstractProvider.php:161

解决:

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

Socialite::driver("weixinweb")->stateless()->user()

 

其他第三方登录在此不做赘述。

文章评论

Top