diff --git a/app/Http/Controllers/IndexController.php b/app/Http/Controllers/IndexController.php index 8dec65f..63da701 100644 --- a/app/Http/Controllers/IndexController.php +++ b/app/Http/Controllers/IndexController.php @@ -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'); } } diff --git a/app/Http/Controllers/MeteMaskLoginController.php b/app/Http/Controllers/MeteMaskLoginController.php new file mode 100644 index 0000000..d5a3f89 --- /dev/null +++ b/app/Http/Controllers/MeteMaskLoginController.php @@ -0,0 +1,69 @@ +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); + } + +} diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 180e4c1..9af210a 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -14,4 +14,8 @@ class UserController extends Controller public function show(){ echo '有权访问show'; } + + public function create(){ + echo '有权访问create'; + } } diff --git a/app/Http/Middleware/CheckNode.php b/app/Http/Middleware/CheckNode.php index 4c43031..ce5752c 100644 --- a/app/Http/Middleware/CheckNode.php +++ b/app/Http/Middleware/CheckNode.php @@ -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); } } diff --git a/app/Models/User.php b/app/Models/User.php index ea4d840..89c938b 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -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'); diff --git a/config/database.php b/config/database.php index 0c23585..b42d9b3 100644 --- a/config/database.php +++ b/config/database.php @@ -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, diff --git a/database/migrations/2022_07_12_071106_create_users_table.php b/database/migrations/2022_07_12_071106_create_users_table.php index 3760c72..f269473 100644 --- a/database/migrations/2022_07_12_071106_create_users_table.php +++ b/database/migrations/2022_07_12_071106_create_users_table.php @@ -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(); }); diff --git a/routes/api.php b/routes/api.php index 70d37c3..e0f754b 100644 --- a/routes/api.php +++ b/routes/api.php @@ -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']); diff --git a/routes/web.php b/routes/web.php index b130397..a19d62d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -16,3 +16,4 @@ use Illuminate\Support\Facades\Route; Route::get('/', function () { return view('welcome'); }); +Route::get('/a', [\App\Http\Controllers\IndexController::class,'index']);