70 lines
2.1 KiB
PHP
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);
|
|
}
|
|
|
|
}
|