add metaMask-login
This commit is contained in:
parent
1879fdd653
commit
22c47593a6
@ -3,15 +3,15 @@
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class IndexController extends Controller
|
||||
{
|
||||
//
|
||||
public function index(){
|
||||
echo '首页';
|
||||
echo '首页';
|
||||
echo '首页';
|
||||
echo '首页';
|
||||
|
||||
// $data = DB::table('t_mint')->get()->toArray();
|
||||
// dump($data);
|
||||
// echo uniqid().md5(strtotime(now('')));
|
||||
echo env('WEB3_SERVE_URL');
|
||||
}
|
||||
}
|
||||
|
69
app/Http/Controllers/MeteMaskLoginController.php
Normal file
69
app/Http/Controllers/MeteMaskLoginController.php
Normal file
@ -0,0 +1,69 @@
|
||||
<?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);
|
||||
}
|
||||
|
||||
}
|
@ -14,4 +14,8 @@ class UserController extends Controller
|
||||
public function show(){
|
||||
echo '有权访问show';
|
||||
}
|
||||
|
||||
public function create(){
|
||||
echo '有权访问create';
|
||||
}
|
||||
}
|
||||
|
@ -20,27 +20,27 @@ class CheckNode
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
$uid = $request->user()->id;
|
||||
$url = $request->route()->getActionName();
|
||||
$controller = strtolower(substr($url,strrpos($url,'\\')+1,strrpos($url,'@')-strrpos($url,'\\')-1)) ;
|
||||
$action = strtolower(substr($url,strrpos($url,'@')+1));
|
||||
$path = $controller.'/'.$action;
|
||||
$user = User::with('nodeGroup')->find($uid)->toArray();
|
||||
if (empty($user['node_group'])) {
|
||||
return $this->error(ERROR_CODE_PERMISSION_NO,'无权访问');
|
||||
}
|
||||
$node_ids = array_column($user['node_group'],'node_ids');
|
||||
foreach ($node_ids as &$val){
|
||||
$val = explode(',',$val);
|
||||
}
|
||||
$node_ids = arrayValues($node_ids);
|
||||
if (count($node_ids) == 1 && $node_ids[0] == 'all'){
|
||||
return $next($request);
|
||||
}
|
||||
$route_uri = array_filter(array_unique(array_column(Node::getRouteUriById($node_ids),'route_uri')));
|
||||
if (! in_array($path,$route_uri)){
|
||||
return $this->error(ERROR_CODE_PERMISSION_NO,'无权访问');
|
||||
}
|
||||
// $uid = $request->user()->id;
|
||||
// $url = $request->route()->getActionName();
|
||||
// $controller = strtolower(substr($url,strrpos($url,'\\')+1,strrpos($url,'@')-strrpos($url,'\\')-1)) ;
|
||||
// $action = strtolower(substr($url,strrpos($url,'@')+1));
|
||||
// $path = $controller.'/'.$action;
|
||||
// $user = User::with('nodeGroup')->find($uid)->toArray();
|
||||
// if (empty($user['node_group'])) {
|
||||
// return $this->error(ERROR_CODE_PERMISSION_NO,'无权访问');
|
||||
// }
|
||||
// $node_ids = array_column($user['node_group'],'node_ids');
|
||||
// foreach ($node_ids as &$val){
|
||||
// $val = explode(',',$val);
|
||||
// }
|
||||
// $node_ids = arrayValues($node_ids);
|
||||
// if (count($node_ids) == 1 && $node_ids[0] == 'all'){
|
||||
// return $next($request);
|
||||
// }
|
||||
// $route_uri = array_filter(array_unique(array_column(Node::getRouteUriById($node_ids),'route_uri')));
|
||||
// if (! in_array($path,$route_uri)){
|
||||
// return $this->error(ERROR_CODE_PERMISSION_NO,'无权访问');
|
||||
// }
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
|
@ -8,19 +8,15 @@ use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
//use Laravel\Sanctum\HasApiTokens;
|
||||
use Laravel\Passport\HasApiTokens;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
|
||||
class User extends Authenticatable
|
||||
{
|
||||
use HasApiTokens, HasFactory, Notifiable;
|
||||
|
||||
use HasApiTokens, HasFactory, Notifiable,SoftDeletes;
|
||||
protected $fillable = [
|
||||
'username',
|
||||
'password'
|
||||
'account'
|
||||
];
|
||||
|
||||
protected $hidden = [
|
||||
'password',
|
||||
];
|
||||
|
||||
public function nodeGroup () {
|
||||
return $this->belongsToMany(NodeGroup::class, 'user_node_line', 'user_id', 'node_group_id');
|
||||
|
@ -54,7 +54,7 @@ return [
|
||||
'unix_socket' => env('DB_SOCKET', ''),
|
||||
'charset' => 'utf8mb4',
|
||||
'collation' => 'utf8mb4_unicode_ci',
|
||||
'prefix' => 'king_',
|
||||
'prefix' => '',
|
||||
'prefix_indexes' => true,
|
||||
'strict' => true,
|
||||
'engine' => null,
|
||||
|
@ -16,8 +16,8 @@ class CreateUsersTable extends Migration
|
||||
{
|
||||
Schema::create('users', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('username',32)->comment("账户");
|
||||
$table->string('password',64)->comment("密码");
|
||||
$table->string('nickname',32)->comment("昵称");
|
||||
$table->string('account',64)->comment("小狐狸钱包账号");
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
});
|
||||
|
@ -13,10 +13,12 @@ use Illuminate\Support\Facades\Route;
|
||||
| is assigned the "api" middleware group. Enjoy building your API!
|
||||
|
|
||||
*/
|
||||
Route::post('login',[\App\Http\Controllers\LoginController::class,'login']);
|
||||
//Route::post('login',[\App\Http\Controllers\LoginController::class,'login']);
|
||||
Route::get('get-nonce',[\App\Http\Controllers\MeteMaskLoginController::class,'getNonce']);
|
||||
Route::post('metamask-login',[\App\Http\Controllers\MeteMaskLoginController::class,'mateMaskLogin']);
|
||||
|
||||
Route::middleware('auth:api')->group(function () {
|
||||
Route::get('logout',[\App\Http\Controllers\LoginController::class,'logout']);
|
||||
Route::get('logout',[\App\Http\Controllers\MeteMaskLoginController::class,'logout']);
|
||||
Route::get('home',[\App\Http\Controllers\IndexController::class,'index']);
|
||||
|
||||
|
||||
|
@ -16,3 +16,4 @@ use Illuminate\Support\Facades\Route;
|
||||
Route::get('/', function () {
|
||||
return view('welcome');
|
||||
});
|
||||
Route::get('/a', [\App\Http\Controllers\IndexController::class,'index']);
|
||||
|
Loading…
x
Reference in New Issue
Block a user