改进 匿名认证
This commit is contained in:
parent
98ac5bb159
commit
f6e8b85a9d
@ -14,13 +14,17 @@ public function store(Request $request): JsonResponse
|
|||||||
{
|
{
|
||||||
$request->validate([
|
$request->validate([
|
||||||
'description' => 'required|string|max:255',
|
'description' => 'required|string|max:255',
|
||||||
|
'require_token' => 'nullable|boolean'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$token = Str::random(128);
|
$token = Str::random(128);
|
||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
'description' => $request->input('description'),
|
'meta' => [
|
||||||
'token' => $token,
|
'description' => $request->input('description'),
|
||||||
|
'token' => $token,
|
||||||
|
'require_token' => $request->input('require_token', false),
|
||||||
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
if ($request->user('module')) {
|
if ($request->user('module')) {
|
||||||
@ -37,7 +41,7 @@ public function store(Request $request): JsonResponse
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
Cache::put('auth_request:'.$token, $data, 120);
|
Cache::put('auth_request:' . $token, $data, 120);
|
||||||
|
|
||||||
$data['url'] = route('auth_request.show', $token);
|
$data['url'] = route('auth_request.show', $token);
|
||||||
|
|
||||||
@ -46,13 +50,13 @@ public function store(Request $request): JsonResponse
|
|||||||
|
|
||||||
public function show($token): JsonResponse
|
public function show($token): JsonResponse
|
||||||
{
|
{
|
||||||
$data = Cache::get('auth_request:'.$token);
|
$data = Cache::get('auth_request:' . $token);
|
||||||
|
|
||||||
if (empty($data)) {
|
if (empty($data)) {
|
||||||
return $this->error('Token 不存在或已过期。');
|
return $this->error('Token 不存在或已过期。');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! isset($data['user'])) {
|
if (!isset($data['user'])) {
|
||||||
$data['user'] = null;
|
$data['user'] = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,13 +6,14 @@
|
|||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Notifications\User\UserNotification;
|
use App\Notifications\User\UserNotification;
|
||||||
use function back;
|
|
||||||
use function config;
|
|
||||||
use Illuminate\Http\RedirectResponse;
|
use Illuminate\Http\RedirectResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Carbon;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Support\Facades\Cache;
|
use Illuminate\Support\Facades\Cache;
|
||||||
use Illuminate\View\View;
|
use Illuminate\View\View;
|
||||||
|
use function back;
|
||||||
|
use function config;
|
||||||
use function redirect;
|
use function redirect;
|
||||||
use function session;
|
use function session;
|
||||||
use function view;
|
use function view;
|
||||||
@ -32,13 +33,13 @@ public function index(Request $request): View|RedirectResponse
|
|||||||
$dashboardHost = parse_url(config('settings.dashboard.base_url'), PHP_URL_HOST);
|
$dashboardHost = parse_url(config('settings.dashboard.base_url'), PHP_URL_HOST);
|
||||||
|
|
||||||
if ($callbackHost === $dashboardHost) {
|
if ($callbackHost === $dashboardHost) {
|
||||||
if (! Auth::guard('web')->user()->isRealNamed()) {
|
if (!Auth::guard('web')->user()->isRealNamed()) {
|
||||||
return redirect()->route('real_name.create')->with('status', '重定向已被打断,需要先实人认证。');
|
return redirect()->route('real_name.create')->with('status', '重定向已被打断,需要先实人认证。');
|
||||||
}
|
}
|
||||||
|
|
||||||
$token = $request->user()->createToken('Dashboard')->plainTextToken;
|
$token = $request->user()->createToken('Dashboard')->plainTextToken;
|
||||||
|
|
||||||
return redirect($callback.'?token='.$token);
|
return redirect($callback . '?token=' . $token);
|
||||||
}
|
}
|
||||||
|
|
||||||
return redirect()->route('confirm_redirect');
|
return redirect()->route('confirm_redirect');
|
||||||
@ -111,7 +112,7 @@ public function exitSudo(): RedirectResponse
|
|||||||
|
|
||||||
public function showAuthRequest($token): View|RedirectResponse
|
public function showAuthRequest($token): View|RedirectResponse
|
||||||
{
|
{
|
||||||
$data = Cache::get('auth_request:'.$token);
|
$data = Cache::get('auth_request:' . $token);
|
||||||
|
|
||||||
if (empty($data)) {
|
if (empty($data)) {
|
||||||
return redirect()->route('index')->with('error', '登录请求的 Token 不存在或已过期。');
|
return redirect()->route('index')->with('error', '登录请求的 Token 不存在或已过期。');
|
||||||
@ -135,7 +136,7 @@ public function storeAuthRequest(Request $request): RedirectResponse
|
|||||||
'token' => 'required|string|max:128',
|
'token' => 'required|string|max:128',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$data = Cache::get('auth_request:'.$request->input('token'));
|
$data = Cache::get('auth_request:' . $request->input('token'));
|
||||||
|
|
||||||
if (empty($data)) {
|
if (empty($data)) {
|
||||||
return back()->with('error', '登录请求的 Token 不存在或已过期。');
|
return back()->with('error', '登录请求的 Token 不存在或已过期。');
|
||||||
@ -145,9 +146,19 @@ public function storeAuthRequest(Request $request): RedirectResponse
|
|||||||
return back()->with('error', '登录请求的 Token 已被使用。');
|
return back()->with('error', '登录请求的 Token 已被使用。');
|
||||||
}
|
}
|
||||||
|
|
||||||
$data['user'] = $request->user('web');
|
$user = $request->user('web');
|
||||||
|
|
||||||
Cache::put('auth_request:'.$request->input('token'), $data, 60);
|
$data['user'] = $user->getOnlyPublic([], [
|
||||||
|
'email',
|
||||||
|
'email_verified_at',
|
||||||
|
'real_name_verified_at',
|
||||||
|
]);
|
||||||
|
|
||||||
|
if (isset($data['meta']['require_token']) && $data['meta']['require_token']) {
|
||||||
|
$data['token'] = $user->createToken($data['meta']['description'] ?? Carbon::now()->toDateString())->plainTextToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
Cache::put('auth_request:' . $request->input('token'), $data, 60);
|
||||||
|
|
||||||
return redirect()->route('index')->with('success', '登录请求已确认。');
|
return redirect()->route('index')->with('success', '登录请求已确认。');
|
||||||
}
|
}
|
||||||
|
@ -29,10 +29,12 @@ class User extends Authenticatable implements MustVerifyEmail
|
|||||||
|
|
||||||
public array $publics = [
|
public array $publics = [
|
||||||
'id',
|
'id',
|
||||||
|
'uuid',
|
||||||
'name',
|
'name',
|
||||||
'email',
|
'email',
|
||||||
'real_name',
|
'real_name',
|
||||||
'balance',
|
'balance',
|
||||||
|
'user_group_id'
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -174,10 +176,13 @@ public function selectPublic(): self|Builder|CachedBuilder
|
|||||||
return $this->select($this->publics);
|
return $this->select($this->publics);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getOnlyPublic($excepts = []): array
|
public function getOnlyPublic($appened_excepts = [], $display = []): array
|
||||||
{
|
{
|
||||||
if ($excepts) {
|
if ($display) {
|
||||||
$this->publics = array_diff($this->publics, $excepts);
|
$this->publics = array_merge($this->publics, $display);
|
||||||
|
}
|
||||||
|
if ($appened_excepts) {
|
||||||
|
$this->publics = array_diff($this->publics, $appened_excepts);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Arr::only($this->toArray(), $this->publics);
|
return Arr::only($this->toArray(), $this->publics);
|
||||||
|
@ -20,12 +20,23 @@
|
|||||||
想要获取你的用户信息。
|
想要获取你的用户信息。
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
<p>{{ $data['description'] }}</p>
|
<p>{{ $data['meta']['description'] }}</p>
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
<p>
|
||||||
|
在您同意后,您的 <b>ID</b>, <b>UUID</b>, <b>昵称</b>, <b>邮件信息 和 实人认证成功的时间(不包含个人信息)</b>, <b>余额</b>,
|
||||||
|
<b>用户组 ID</b> 将会被发送给它们。
|
||||||
|
@if ($data['meta']['require_token'])
|
||||||
|
<br />
|
||||||
|
你的 <b>Token</b> 将会新建一个,并发送给它们。
|
||||||
|
@endif
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
@auth('web')
|
@auth('web')
|
||||||
<form method="POST" action="{{ route('auth_request.store') }}">
|
<form method="POST" action="{{ route('auth_request.store') }}">
|
||||||
@csrf
|
@csrf
|
||||||
<input type="hidden" name="token" value="{{ $data['token'] }}">
|
<input type="hidden" name="token" value="{{ $data['meta']['token'] }}">
|
||||||
<button type="submit" class="btn btn-primary">同意</button>
|
<button type="submit" class="btn btn-primary">同意</button>
|
||||||
</form>
|
</form>
|
||||||
@else
|
@else
|
||||||
|
Loading…
Reference in New Issue
Block a user