MemberAuth.php 2.8 KB

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