MemberAuthMiddleware.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. namespace App\Http\Middleware;
  3. use App\Exceptions\MemberAuthException;
  4. use App\Models\Member;
  5. use App\Servers\RedisDataServer;
  6. use Closure;
  7. class MemberAuthMiddleware
  8. {
  9. private $noAuth=[
  10. 'member.register',
  11. 'member.index',
  12. 'member.login',
  13. 'common.location',
  14. 'common.file',
  15. 'common.js',
  16. 'common.send',
  17. 'news.banner',
  18. 'news.notices',
  19. 'news.notice',
  20. 'news.about_us',
  21. 'common.start',
  22. 'common.app_version',
  23. 'common.privacy_info',//获取隐私协议
  24. ];
  25. /**
  26. * Handle an incoming request.
  27. *
  28. * @param \Illuminate\Http\Request $request
  29. * @param \Closure $next
  30. * @return mixed
  31. */
  32. public function handle($request, Closure $next)
  33. {
  34. //验证会员授权信息
  35. $clientRoute = request()->route()->getName();
  36. if (!in_array($clientRoute, $this->noAuth)) {
  37. $m_id = $request->input('m_id','5');
  38. $token = $request->input('token','04c97f7287eb8242ca0fc3cc41b7b555');
  39. if (empty($m_id) || empty($token) || !is_numeric($m_id)) {
  40. throw new MemberAuthException('缺少认证信息', 401);
  41. }
  42. $member = RedisDataServer::creatServer()->getData( 'login_' . $m_id, 'json');
  43. if (empty($member)) {
  44. $member = Member::where('id', $m_id)->where('status',1)->select(['id', 'phone', 'nickname', 'status', 'token_str', 'level_id', 'source'])->first();
  45. if(empty($member)){
  46. throw new MemberAuthException('认证信息已过期', 401);
  47. }
  48. }
  49. if ($member['token_str'] != $token) {
  50. throw new MemberAuthException('认证信息已过期', 401);
  51. }
  52. //用户信息缓存30秒
  53. RedisDataServer::creatServer()->setData($token . '_' . $m_id, $member, 'json', 300);
  54. $request->member = $member;
  55. }else{
  56. $m_id = $request->input('m_id','');
  57. $token = $request->input('token','');
  58. if($m_id && $token){
  59. $member = RedisDataServer::creatServer()->getData( 'login_' . $m_id, 'json');
  60. if (empty($member)) {
  61. $member = Member::where('id', $m_id)->where('status',1)->select(['id', 'phone', 'nickname', 'status', 'token_str', 'level_id', 'source'])->first();
  62. }
  63. //用户信息缓存30秒
  64. if($member){
  65. RedisDataServer::creatServer()->setData($token . '_' . $m_id, $member, 'json', 300);
  66. $request->member = $member;
  67. }else{
  68. $request->member = ['id'=>0];
  69. }
  70. }else{
  71. $request->member = ['id'=>0];
  72. }
  73. }
  74. return $next($request);
  75. }
  76. }