增加 模块登录请求
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\RedirectResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
use Illuminate\Support\Facades\Cache;
|
||||||
use Illuminate\View\View;
|
use Illuminate\View\View;
|
||||||
use function redirect;
|
use function redirect;
|
||||||
use function session;
|
use function session;
|
||||||
@ -100,4 +101,44 @@ public function logout(): RedirectResponse
|
|||||||
|
|
||||||
return redirect()->route('index');
|
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
|
<?php
|
||||||
|
|
||||||
|
use App\Http\Controllers\Module\AuthRequestController;
|
||||||
use App\Http\Controllers\Module\BroadcastController;
|
use App\Http\Controllers\Module\BroadcastController;
|
||||||
use App\Http\Controllers\Module\DeviceController;
|
use App\Http\Controllers\Module\DeviceController;
|
||||||
use App\Http\Controllers\Module\HostController;
|
use App\Http\Controllers\Module\HostController;
|
||||||
@ -36,3 +37,7 @@
|
|||||||
// 模块间调用
|
// 模块间调用
|
||||||
Route::any('modules/{module}/{path?}', [ModuleController::class, 'exportCall'])
|
Route::any('modules/{module}/{path?}', [ModuleController::class, 'exportCall'])
|
||||||
->where('path', '.*');
|
->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::post('email/resend', [VerificationController::class, 'resend'])->name('verification.resend');
|
||||||
});
|
});
|
||||||
|
|
||||||
Route::middleware(['auth', 'banned', 'verified'])->group(
|
Route::middleware(['auth:web', 'banned', 'verified'])->group(
|
||||||
function () {
|
function () {
|
||||||
/* Start 账户区域 */
|
/* Start 账户区域 */
|
||||||
Route::withoutMiddleware(['banned', 'verified'])->group(
|
Route::withoutMiddleware(['banned', 'verified'])->group(
|
||||||
@ -74,6 +74,11 @@ function () {
|
|||||||
Route::get('real_name', [RealNameController::class, 'create'])->name('real_name.create');
|
Route::get('real_name', [RealNameController::class, 'create'])->name('real_name.create');
|
||||||
Route::post('real_name', [RealNameController::class, 'store'])->name('real_name.store');
|
Route::post('real_name', [RealNameController::class, 'store'])->name('real_name.store');
|
||||||
/* End 实名认证 */
|
/* 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