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