| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- <?php
- namespace App\Http\Middleware;
- use App\Models\Member;
- use App\Servers\MemberLogsServer;
- use App\Servers\RedisDataServer;
- use Closure;
- class MemberAuth
- {
- /**
- * Handle an incoming request.
- *
- * @param \Illuminate\Http\Request $request
- * @param \Closure $next
- * @return mixed
- */
- public function handle($request, Closure $next)
- {
- //不需要验证的路由
- $noAuth = [
- 'notify.order_wx',//订单微信支付回调
- 'member.appletLogin',//小程序授权登录
- ];
- // echo '这里是请求穿越阶段,也就是请求处理前';
- $clientRoute = request()->route()->getName();//获取当前路由
- //获取token
- $m_id = $request->input('m_id',0);
- $token = $request->input('token');
- if(empty($token)){
- $token=$request->header('Authorization');
- }
- $redisServer = RedisDataServer::creatServer();
- //该路由不需要验证
- if (in_array($clientRoute,$noAuth)){
- if( $token){
- $member = $redisServer->getData( 'login_' . $m_id, 'json');
- if (empty($member)) {
- $member = Member::where('id', $m_id)->where('is_del',0)->select(['id', 'phone', 'nickname','head_img', 'token_str'])->first();
- }
- //用户信息缓存30秒
- if($member){
- $redisServer->setData('login_' . $m_id, $member, 'json', 30);
- $request->member = $member;
- }else{
- $request->member = ['id'=>0];
- }
- }else{
- $request->member = ['id'=>0];
- }
- }else{
- if(empty($m_id) || empty($token)){
- return response()->json(['code' => 401, 'msg' => '缺少认证信息']);
- }
- //获取当前用户
- $member = $redisServer->getData( 'login_' . $m_id, 'json');
- if (empty($member)) {
- $member = Member::where('id', $m_id)->where('is_del',0)->select(['id', 'phone', 'nickname', 'token_str','head_img'])->first();
- if(empty($member)){
- return response()->json(['code' => 401, 'msg' => '认证信息已过期']);
- }
- if ($member['token_str'] != $token) {
- return response()->json(['code' => 401, 'msg' => '认证信息已过期']);
- }
- //用户信息缓存
- $redisServer->setData('login_' . $m_id, $member, 'json', 600);
- }else{
- if ($member['token_str'] != $token) {
- return response()->json(['code' => 401, 'msg' => '认证信息已过期']);
- }
- }
- $request->member = $member;
- }
- //记录访问日志
- MemberLogsServer::write($clientRoute);
- return $next($request);
- }
- }
|