MemberAuth.php 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. namespace App\Http\Middleware;
  3. use App\Models\Member;
  4. use App\Servers\MemberLogsServer;
  5. use App\Servers\RedisDataServer;
  6. use Closure;
  7. class MemberAuth
  8. {
  9. /**
  10. * Handle an incoming request.
  11. *
  12. * @param \Illuminate\Http\Request $request
  13. * @param \Closure $next
  14. * @return mixed
  15. */
  16. public function handle($request, Closure $next)
  17. {
  18. //不需要验证的路由
  19. $noAuth = [
  20. 'notify.order_wx',//订单微信支付回调
  21. 'member.appletLogin',//小程序授权登录
  22. ];
  23. // echo '这里是请求穿越阶段,也就是请求处理前';
  24. $clientRoute = request()->route()->getName();//获取当前路由
  25. //获取token
  26. $m_id = $request->input('m_id',0);
  27. $token = $request->input('token');
  28. if(empty($token)){
  29. $token=$request->header('Authorization');
  30. }
  31. $redisServer = RedisDataServer::creatServer();
  32. //该路由不需要验证
  33. if (in_array($clientRoute,$noAuth)){
  34. if( $token){
  35. $member = $redisServer->getData( 'login_' . $m_id, 'json');
  36. if (empty($member)) {
  37. $member = Member::where('id', $m_id)->where('is_del',0)->select(['id', 'phone', 'nickname','head_img', 'token_str'])->first();
  38. }
  39. //用户信息缓存30秒
  40. if($member){
  41. $redisServer->setData('login_' . $m_id, $member, 'json', 30);
  42. $request->member = $member;
  43. }else{
  44. $request->member = ['id'=>0];
  45. }
  46. }else{
  47. $request->member = ['id'=>0];
  48. }
  49. }else{
  50. if(empty($m_id) || empty($token)){
  51. return response()->json(['code' => 401, 'msg' => '缺少认证信息']);
  52. }
  53. //获取当前用户
  54. $member = $redisServer->getData( 'login_' . $m_id, 'json');
  55. if (empty($member)) {
  56. $member = Member::where('id', $m_id)->where('is_del',0)->select(['id', 'phone', 'nickname', 'token_str','head_img'])->first();
  57. if(empty($member)){
  58. return response()->json(['code' => 401, 'msg' => '认证信息已过期']);
  59. }
  60. if ($member['token_str'] != $token) {
  61. return response()->json(['code' => 401, 'msg' => '认证信息已过期']);
  62. }
  63. //用户信息缓存
  64. $redisServer->setData('login_' . $m_id, $member, 'json', 600);
  65. }else{
  66. if ($member['token_str'] != $token) {
  67. return response()->json(['code' => 401, 'msg' => '认证信息已过期']);
  68. }
  69. }
  70. $request->member = $member;
  71. }
  72. //记录访问日志
  73. MemberLogsServer::write($clientRoute);
  74. return $next($request);
  75. }
  76. }