增加 模块登录请求
This commit is contained in:
parent
302e8d46b3
commit
8e56bb86f1
47
app/Http/Controllers/Module/AuthRequestController.php
Normal file
47
app/Http/Controllers/Module/AuthRequestController.php
Normal file
@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Module;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class AuthRequestController extends Controller
|
||||
{
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'description' => 'required|string|max:255',
|
||||
]);
|
||||
|
||||
$token = Str::random(128);
|
||||
|
||||
$data = [
|
||||
'description' => $request->input('description'),
|
||||
'token' => $token,
|
||||
'module' => $request->user('module')->toArray(),
|
||||
];
|
||||
|
||||
Cache::put('auth_request:'.$token, $data, 120);
|
||||
|
||||
$data['url'] = route('auth_request.show', $token);
|
||||
|
||||
return $this->success($data);
|
||||
}
|
||||
|
||||
public function show($token)
|
||||
{
|
||||
$data = Cache::get('auth_request:'.$token);
|
||||
|
||||
if (empty($data)) {
|
||||
return $this->error('Token 不存在或已过期。');
|
||||
}
|
||||
|
||||
if (! isset($data['user'])) {
|
||||
$data['user'] = [];
|
||||
}
|
||||
|
||||
return $this->success($data);
|
||||
}
|
||||
}
|
@ -11,6 +11,7 @@
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\View\View;
|
||||
use function redirect;
|
||||
use function session;
|
||||
@ -100,4 +101,44 @@ public function logout(): RedirectResponse
|
||||
|
||||
return redirect()->route('index');
|
||||
}
|
||||
|
||||
public function showAuthRequest($token): View|RedirectResponse
|
||||
{
|
||||
$data = Cache::get('auth_request:'.$token);
|
||||
|
||||
if (empty($data)) {
|
||||
return redirect()->route('index')->with('error', '登录请求的 Token 不存在或已过期。');
|
||||
}
|
||||
|
||||
if (isset($data['user'])) {
|
||||
return redirect()->route('index')->with('error', '登录请求的 Token 已被使用。');
|
||||
}
|
||||
|
||||
return view('auth.request', [
|
||||
'data' => $data,
|
||||
]);
|
||||
}
|
||||
|
||||
public function storeAuthRequest(Request $request): RedirectResponse
|
||||
{
|
||||
$request->validate([
|
||||
'token' => 'required|string|max:128',
|
||||
]);
|
||||
|
||||
$data = Cache::get('auth_request:'.$request->input('token'));
|
||||
|
||||
if (empty($data)) {
|
||||
return back()->with('error', '登录请求的 Token 不存在或已过期。');
|
||||
}
|
||||
|
||||
if (isset($data['user'])) {
|
||||
return back()->with('error', '登录请求的 Token 已被使用。');
|
||||
}
|
||||
|
||||
$data['user'] = $request->user('web');
|
||||
|
||||
Cache::put('auth_request:'.$request->input('token'), $data, 120);
|
||||
|
||||
return redirect()->route('index')->with('success', '登录请求已确认。');
|
||||
}
|
||||
}
|
||||
|
21
resources/views/auth/request.blade.php
Normal file
21
resources/views/auth/request.blade.php
Normal file
@ -0,0 +1,21 @@
|
||||
@extends('layouts.app')
|
||||
|
||||
@section('title', '认证')
|
||||
|
||||
@section('content')
|
||||
|
||||
<h3><code>{{ $data['module']['name'] }}</code> 想要获取你的用户信息。</h3>
|
||||
|
||||
<p>{{ $data['description'] }}</p>
|
||||
|
||||
@auth('web')
|
||||
|
||||
<form method="POST" action="{{ route('auth_request.store') }}">
|
||||
@csrf
|
||||
<input type="hidden" name="token" value="{{ $data['token'] }}">
|
||||
<button type="submit" class="btn btn-primary">同意</button>
|
||||
</form>
|
||||
|
||||
@endauth
|
||||
|
||||
@endsection
|
@ -1,5 +1,6 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Controllers\Module\AuthRequestController;
|
||||
use App\Http\Controllers\Module\BroadcastController;
|
||||
use App\Http\Controllers\Module\DeviceController;
|
||||
use App\Http\Controllers\Module\HostController;
|
||||
@ -36,3 +37,7 @@
|
||||
// 模块间调用
|
||||
Route::any('modules/{module}/{path?}', [ModuleController::class, 'exportCall'])
|
||||
->where('path', '.*');
|
||||
|
||||
// 认证请求
|
||||
Route::post('auth_request', [AuthRequestController::class, 'store']);
|
||||
Route::get('auth_request/{token}', [AuthRequestController::class, 'show']);
|
||||
|
@ -35,7 +35,7 @@
|
||||
Route::post('email/resend', [VerificationController::class, 'resend'])->name('verification.resend');
|
||||
});
|
||||
|
||||
Route::middleware(['auth', 'banned', 'verified'])->group(
|
||||
Route::middleware(['auth:web', 'banned', 'verified'])->group(
|
||||
function () {
|
||||
/* Start 账户区域 */
|
||||
Route::withoutMiddleware(['banned', 'verified'])->group(
|
||||
@ -74,6 +74,11 @@ function () {
|
||||
Route::get('real_name', [RealNameController::class, 'create'])->name('real_name.create');
|
||||
Route::post('real_name', [RealNameController::class, 'store'])->name('real_name.store');
|
||||
/* End 实名认证 */
|
||||
|
||||
/* Start 匿名登录 */
|
||||
Route::get('auth_request/{auth_request}', [AuthController::class, 'showAuthRequest'])->withoutMiddleware(['auth:web', 'verified'])->name('auth_request.show');
|
||||
Route::post('auth_request', [AuthController::class, 'storeAuthRequest'])->name('auth_request.store');
|
||||
/* End 匿名登录 */
|
||||
}
|
||||
);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user