MemberAuth.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. ];
  22. // echo '这里是请求穿越阶段,也就是请求处理前';
  23. $clientRoute = request()->route()->getName();//获取当前路由
  24. //获取token
  25. $m_id = $request->input('m_id',0);
  26. $token = $request->input('token');
  27. if(empty($token)){
  28. $token=$request->header('Authorization');
  29. }
  30. $redisServer = RedisDataServer::creatServer();
  31. //该路由不需要验证
  32. if (in_array($clientRoute,$noAuth)){
  33. if( $token){
  34. $member = $redisServer->getData( 'login_' . $m_id, 'json');
  35. if (empty($member)) {
  36. $member = Member::where('id', $m_id)->where('is_del',0)->select(['id', 'phone', 'nickname','head_img', 'token_str'])->first();
  37. }
  38. //用户信息缓存30秒
  39. if($member){
  40. $redisServer->setData('login_' . $m_id, $member, 'json', 30);
  41. $request->member = $member;
  42. }else{
  43. $request->member = ['id'=>0];
  44. }
  45. }else{
  46. $request->member = ['id'=>0];
  47. }
  48. }else{
  49. if(empty($m_id) || empty($token)){
  50. return response()->json(['code' => 401, 'msg' => '缺少认证信息']);
  51. }
  52. //获取当前用户
  53. $member = $redisServer->getData( 'login_' . $m_id, 'json');
  54. if (empty($member)) {
  55. $member = Member::where('id', $m_id)->where('is_del',0)->select(['id', 'phone', 'nickname', 'token_str','head_img'])->first();
  56. if(empty($member)){
  57. return response()->json(['code' => 401, 'msg' => '认证信息已过期']);
  58. }
  59. if ($member['token_str'] != $token) {
  60. return response()->json(['code' => 401, 'msg' => '认证信息已过期']);
  61. }
  62. //用户信息缓存
  63. $redisServer->setData('login_' . $m_id, $member, 'json', 600);
  64. }else{
  65. if ($member['token_str'] != $token) {
  66. return response()->json(['code' => 401, 'msg' => '认证信息已过期']);
  67. }
  68. }
  69. $request->member = $member;
  70. }
  71. //记录访问日志
  72. MemberLogsServer::write($clientRoute);
  73. return $next($request);
  74. }
  75. }