CaiWuXiTong/app/Http/Middleware/LogoutIfDingTalkBindingRevoked.php

36 lines
1007 B
PHP

<?php
namespace App\Http\Middleware;
use App\Models\Auth\DingTalkIdentity;
use Closure;
class LogoutIfDingTalkBindingRevoked
{
public function handle($request, Closure $next)
{
$identityId = $request->session()->get('dingtalk_identity_id');
if (! $identityId) {
return $next($request);
}
$user = $request->user();
if ($user && $user->enabled && DingTalkIdentity::query()
->whereKey($identityId)->where('user_id', $user->id)->exists()) {
return $next($request);
}
auth()->logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
if ($request->expectsJson()) {
return response()->json(['message' => trans('auth.dingtalk.session_expired')], 401)
->header('Cache-Control', 'no-store');
}
return redirect()->route('login')
->with('dingtalk_error', trans('auth.dingtalk.session_expired'));
}
}