微信小程序 微信登录
参考:
使用微信登录
jwt
JWT 由头部(header)、载荷(payload)与签名(signature)组成.客户端请求的时候在 Header 中携带 Token,服务器获取 Token 后,进行 base64_decode 即可获取数据进行校验
token验证过程
DingoApi api.auth 中间件完成了token 验证。
- 获取客户端提交的 token
- 检测 token 中的签名 signature 是否正确
- 判断 payload 数据中的 exp,是否已经过期
- 根据 payload 数据中的 sub,取数据库中验证用户是否存在
上述检测不正确,则抛出相应异常
安装jwt-auth
1 | $ composer require tymon/jwt-auth:1.0.0-rc.4.1 |
config/auth.php
1 | ... |
config/api.php
1 | ... |
app/User.php
1 | ... |
进入 tinker1
2
3$user= App\User::first();
//生成access_token
Auth::guard('api')->fromUser($user);
修改数据表
1 | $ php artisan make:migration add_weixin_session_key_to_users_table --table=users |
database/migrations/<your_date>add_weixin_session_key_to_users_table.php
1 |
|
1 | $ php artisan migrate |
增加路由
routes/api.php1
2
3
4
5...
//微信登录
$api->post('weapp/authorizations','AuthorizationsController@weappStore')
->name('api.weapp.authorizations.store');
增加Request
1 | $ php artisan make:request Api/WeappAuthorizationRequest |
app/Http/Requests/Api/WeappAuthorizationRequest.php
1 |
|
修改Controller
1 |
|
- 提交 code,验证 code 的正确性
- 通过 openid 查找用户,用户不存在,且用户未提交用户名,返回403
- 用户不存在 ,用户名提交用户名和密码,验证用户和密码是否正确,错误返回401
- 未绑定微信的用户更新 openid,session_key;绑定的用户只更新 session_key.
- 最后返回 access_token
app/User.php
1 | ... |
Postman测试
code只能使用一次,每次测试要刷新微信小程序端的code
code验证通过,没有提交用户名
用户名和密码验证用过,没有和微信绑定的情况
用户和微信绑定的情况