game2006admin_be/app/Http/Controllers/MeteMaskLoginController.php
2022-07-19 19:06:28 +08:00

70 lines
2.1 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;
class MeteMaskLoginController extends Controller
{
public function getNonce(Request $request)
{
$account = $request->get('account', '');
if (!$account) {
return $this->error(ERROR_CODE_PARAM_INVALID, '缺少参数:account');
}
$nonce = uniqid() . '_' . md5(time());
return $this->success($nonce);
}
public function mateMaskLogin(Request $request)
{
$account = strtolower($request->get('account', ''));
$tips = strtolower($request->get('tips', ''));
$nonce = strtolower($request->get('nonce', ''));
$signature = strtolower($request->get('signature', ''));
$param = [
'c' => 'BcService',
'a' => 'authVerifySignature',
'tips' => $tips,
'nonce' => $nonce,
'signature' => $signature
];
$response = Http::get(env('WEB3_SERVE_URL'), $param);
if (!$response->successful()) {
return $this->error(ERROR_CODE_INTERNAL_ERROR, 'WEB3服务出现错误');
}
$res = $response->json();
if (! isset($res['recovered'])){
return $this->error(ERROR_CODE_INTERNAL_ERROR, 'Signature verification failed');
}
if(! $this->isSameAddress($res['recovered'],$account)){
return $this->error(ERROR_CODE_INTERNAL_ERROR, 'Signature verification failed');
}
$user = User::withTrashed()->firstOrCreate([
'account' => $account
]);
if($user->trashed()) {
return $this->error(ERROR_CODE_PERMISSION_NO,'账号号已禁用, 无法登陆');
}
$user['token'] = $user->createToken('api')->accessToken;
return $this->success($user);
}
/**
* 退出登录
* @return \Illuminate\Http\JsonResponse
*/
public function logout (Request $request) {
$request->user()->token()->revoke();
return $this->success();
}
private function isSameAddress($a,$b){
return strtolower($a) == strtolower($b);
}
}