registration nearly finished

login almost finished too.
Only thing with registration is that it doesn't log the user in after; but other than that, it works fine.
This commit is contained in:
xander 2022-03-05 05:52:21 -06:00
parent f5cedffc20
commit 79d8ecdff4
11 changed files with 202 additions and 40 deletions

View File

@ -8,6 +8,8 @@ use App\Models\User;
use Illuminate\Foundation\Auth\RegistersUsers; use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use Request;
use Auth;
class RegisterController extends Controller class RegisterController extends Controller
{ {
@ -50,7 +52,7 @@ class RegisterController extends Controller
protected function validator(array $data) protected function validator(array $data)
{ {
return Validator::make($data, [ return Validator::make($data, [
'name' => ['required', 'string', 'max:255'], 'username' => ['required', 'string', 'max:16', 'unique:users'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed'], 'password' => ['required', 'string', 'min:8', 'confirmed'],
]); ]);
@ -62,12 +64,37 @@ class RegisterController extends Controller
* @param array $data * @param array $data
* @return \App\Models\User * @return \App\Models\User
*/ */
protected function create(array $data) protected function create(Request $request)
{ {
return User::create([
'name' => $data['name'], $data = Request::all();
'email' => $data['email'],
'password' => Hash::make($data['password']), if (Request::input('password') != Request::input('confirmation')) {
return Response()->json(['message'=>"Those passwords don't match!", 'badInputs'=>['password','confirmation']]);
}
$valid = Validator::make($data, [
'username' => ['required', 'string', 'max:16', 'unique:users'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8'],
]); ]);
if ($valid->stopOnFirstFailure()->fails()) {
$error = $valid->errors()->first();
$messages = $valid->messages()->get('*');
return Response()->json(['message'=>$error, 'badInputs'=>[array_keys($messages)]]);
}
$user = new User;
$user->username = $data['username'];
$user->email = $data['email'];
$user->password = Hash::make($data['password']);
$user->save();
Auth::login($user);
Request::session()->regenerate();
return Response()->json('good');
} }
} }

View File

@ -5,14 +5,48 @@ namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Foundation\Validation\ValidatesRequests;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use App\Models\User;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Routing\Controller as BaseController; use Illuminate\Routing\Controller as BaseController;
use Auth;
use Request;
class Controller extends BaseController class Controller extends BaseController
{ {
use AuthorizesRequests, DispatchesJobs, ValidatesRequests; use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
function register() { public function __construct()
return Response()->json('lmao'); {
$this->middleware('guest');
}
public function login(Request $request) {
$data = Request::all();
$valid = Validator::make($data, [
'username' => ['required', 'string'],
'password' => ['required', 'string'],
]);
if ($valid->stopOnFirstFailure()->fails()) {
$error = $valid->errors()->first();
$messages = $valid->messages()->get('*');
return Response()->json(['message'=>$error, 'badInputs'=>[array_keys($messages)]]);
}
if (!Auth::attempt(Request::only('username', 'password'))) {
return Response()->json(['message'=>'Sorry, thats the wrong password!', 'badInputs'=>['password']]);
}
Request::session()->regenerate();
return Response()->json('good');
} }
} }

View File

@ -20,6 +20,8 @@ class Kernel extends HttpKernel
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class, \App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
]; ];
/** /**

View File

@ -11,6 +11,7 @@
"guzzlehttp/guzzle": "^7.0.1", "guzzlehttp/guzzle": "^7.0.1",
"laravel/framework": "^8.54", "laravel/framework": "^8.54",
"laravel/sail": "^1.12", "laravel/sail": "^1.12",
"laravel/sanctum": "^2.14",
"laravel/tinker": "^2.5", "laravel/tinker": "^2.5",
"laravel/ui": "^3.3", "laravel/ui": "^3.3",
"predis/predis": "^1.1" "predis/predis": "^1.1"

68
web/composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "c6a0e979567b55245388bdaffddfe2e4", "content-hash": "a52c905d9f6deaf85235a92494c0600b",
"packages": [ "packages": [
{ {
"name": "asm89/stack-cors", "name": "asm89/stack-cors",
@ -1165,6 +1165,70 @@
}, },
"time": "2021-10-26T21:37:54+00:00" "time": "2021-10-26T21:37:54+00:00"
}, },
{
"name": "laravel/sanctum",
"version": "v2.14.2",
"source": {
"type": "git",
"url": "https://github.com/laravel/sanctum.git",
"reference": "dc5d749ba9bfcfd68d8f5c272238f88bea223e66"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/sanctum/zipball/dc5d749ba9bfcfd68d8f5c272238f88bea223e66",
"reference": "dc5d749ba9bfcfd68d8f5c272238f88bea223e66",
"shasum": ""
},
"require": {
"ext-json": "*",
"illuminate/contracts": "^6.9|^7.0|^8.0|^9.0",
"illuminate/database": "^6.9|^7.0|^8.0|^9.0",
"illuminate/support": "^6.9|^7.0|^8.0|^9.0",
"php": "^7.2|^8.0"
},
"require-dev": {
"mockery/mockery": "^1.0",
"orchestra/testbench": "^4.0|^5.0|^6.0|^7.0",
"phpunit/phpunit": "^8.0|^9.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.x-dev"
},
"laravel": {
"providers": [
"Laravel\\Sanctum\\SanctumServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"Laravel\\Sanctum\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Taylor Otwell",
"email": "taylor@laravel.com"
}
],
"description": "Laravel Sanctum provides a featherweight authentication system for SPAs and simple APIs.",
"keywords": [
"auth",
"laravel",
"sanctum"
],
"support": {
"issues": "https://github.com/laravel/sanctum/issues",
"source": "https://github.com/laravel/sanctum"
},
"time": "2022-02-16T14:40:23+00:00"
},
{ {
"name": "laravel/tinker", "name": "laravel/tinker",
"version": "v2.6.1", "version": "v2.6.1",
@ -7927,5 +7991,5 @@
"php": "^7.3|^8.0" "php": "^7.3|^8.0"
}, },
"platform-dev": [], "platform-dev": [],
"plugin-api-version": "2.0.0" "plugin-api-version": "2.1.0"
} }

View File

@ -46,7 +46,7 @@ return [
| |
*/ */
'encrypt' => false, 'encrypt' => true,
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------

View File

@ -0,0 +1,35 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('username');
$table->string('email');
$table->timestamp('email_verified_at')->default(null);
$table->string('password');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}

View File

@ -9,45 +9,40 @@ axios.defaults.withCredentials = true
var url = Config.BaseUrl.replace('http://', ''); var url = Config.BaseUrl.replace('http://', '');
var protocol = Config.Protocol; var protocol = Config.Protocol;
export async function CreateAccount(form) export function CreateAccount(form)
{ {
console.log(form.get('username'));
const finished = false;
const body = form; const body = form;
var badInputs = [];
await axios.post(`${protocol}apis.${url}/account/register`, body, {headers: {"Access-Control-Allow-Origin": "*"}}).then(res=>{ return new Promise(async (resolve, reject)=>{
console.log(res); await axios.post(`${protocol}apis.${url}/account/register`, body, {headers: {'X-CSRF-TOKEN': document.querySelector(`meta[name="csrf-token"]`).content}}).then(data=>{
}).catch(error=>console.log(error)); const res = data.data;
if (res.badInputs.length >= 1) {
return new Promise((resolve, reject)=>{ badInputs=res.badInputs;
resolve({message: res.message, inputs: res.badInputs});
if (finished) { }
resolve("good"); resolve("good");
}else{ }).catch(error=>{console.log(error);});
resolve({message: `bad`, inputs: [`username`]});
}
}); });
} }
export const LoginToAccount = async (form) => { export const LoginToAccount = (form) => {
console.log(form.get('Username'));
const finished = true;
const body = form; const body = form;
await axios.post(`${protocol}${url}/api/login`, body).then(res=>{ return new Promise(async (resolve, reject)=>{
console.log(body);
}).catch(error=>console.log(error));
return new Promise((resolve, reject)=>{ await axios.post(`${protocol}apis.${url}/account/login`, body, {headers: {'X-CSRF-TOKEN': document.querySelector(`meta[name="csrf-token"]`).content}}).then(data=>{
const res = data.data;
if (finished) { if (res.badInputs.length >= 1) {
badInputs=res.badInputs;
resolve({message: res.message, inputs: res.badInputs});
}
resolve("good"); resolve("good");
}else{ }).catch(error=>{console.log(error);});
reject({message: `bad`, inputs: [`username`]});
}
}); });
} }

View File

@ -41,8 +41,8 @@ const LoginForm = (props) => {
e.preventDefault(); e.preventDefault();
SubmitLogin(new FormData(e.target)); SubmitLogin(new FormData(e.target));
}} class="fs"> }} class="fs">
<input type="username" className={`form-control mb-4 ${(validity.inputs.find(input=>input == `username`)? `is-invalid` : ``)}`} placeholder="Username" name="Username"/> <input type="username" className={`form-control mb-4 ${(validity.inputs.find(input=>input == `username`)? `is-invalid` : ``)}`} placeholder="Username" name="username"/>
<input type="password" className={`form-control mb-4 ${(validity.inputs.find(input=>input == `password`)? `is-invalid` : ``)}`} placeholder="Password" name="Password"/> <input type="password" className={`form-control mb-4 ${(validity.inputs.find(input=>input == `password`)? `is-invalid` : ``)}`} placeholder="Password" name="password"/>
<div className="d-flex mb-3"> <div className="d-flex mb-3">
<ReCAPTCHA <ReCAPTCHA
sitekey="6LeyHsUbAAAAAJ9smf-als-hXqrg7a-lHZ950-fL" sitekey="6LeyHsUbAAAAAJ9smf-als-hXqrg7a-lHZ950-fL"

View File

@ -14,6 +14,7 @@
<meta property="og:type" content="website"/> <meta property="og:type" content="website"/>
<meta property="og:image" content="{{ asset('images/banner.png') }}"> <meta property="og:image" content="{{ asset('images/banner.png') }}">
<meta name="twitter:image" content="{{ asset('images/banner.png') }}"> <meta name="twitter:image" content="{{ asset('images/banner.png') }}">
<meta name="csrf-token" content="{{ csrf_token() }}">
<meta name="twitter:card" content="summary_large_image"> <meta name="twitter:card" content="summary_large_image">
@once @once
<link href="{{ asset('favicon.ico') }}" rel="icon" integrity="{{ Sri::hash('favicon.ico') }}" crossorigin="anonymous" /> <link href="{{ asset('favicon.ico') }}" rel="icon" integrity="{{ Sri::hash('favicon.ico') }}" crossorigin="anonymous" />

View File

@ -5,6 +5,7 @@ use Illuminate\Support\Facades\Route;
use App\Http\Controllers\BannerController; use App\Http\Controllers\BannerController;
use App\Http\Controllers\GamesController; use App\Http\Controllers\GamesController;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Http\Controllers\Auth\RegisterController;
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -27,7 +28,9 @@ Route::get('/games/metadata', 'GamesController@isAvailable');
Route::post('/maintenance/bypass', 'MaintenanceController@bypass'); Route::post('/maintenance/bypass', 'MaintenanceController@bypass');
Route::post('/account/register', 'Controller@register'); Route::post('/account/register', 'Auth\RegisterController@create');
Route::post('/account/login', 'Controller@login');
Route::fallback(function(){ Route::fallback(function(){
return response('{"errors":[{"code":404,"message":"NotFound"}]}', 404) return response('{"errors":[{"code":404,"message":"NotFound"}]}', 404)