PHP LUMEN AUTHENTICATION
PHP LUMEN AUTHENTICATION
1.
Membuat
Table users
Untuk
membuat table users, mari kita ikuti
langkah-langkah berikut ini:
1)
Membuat database
migration dengan menjalankan command dibawah ini pada terminal: php artisan make:migration _table_user_ --create=users
2) Buka
file database/migrations/ 2021_01_30_064001__table_user_.php, dan ubah menjadi
seperti dibawah ini
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class TableUser extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string("email")->unique();
$table->string("password");
$table->string("token")->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
2.
Membuat
Model User
Untuk membuat model user, ikuti langkah dibawah ini:
1) Buat model dengan nama
User di folder app. Namun biasanya lumen sudah membuatkan satu model dengan
nama User.php. Silahkan ubah kodenya menjad kode seperti di bawah ini :
<?php
namespace App;
use Illuminate\Auth\Authenticatable;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Database\Eloquent\Model;
use Laravel\Lumen\Auth\Authorizable;
class User extends Model implements AuthenticatableContract, AuthorizableContract
{
use Authenticatable, Authorizable;
protected $fillable = [
'email', 'password', 'token'
];
protected $hidden = [
'password',
];
}
3.
Endpoint
Saat ini kita sudah mengimplementasikan endpoint yang
akan kita gunakan, yakni seperti ini:
Method (HTTP Verbs) |
Endpoint |
Description |
POST |
/auth/register |
Untuk mendaftarkan user |
POST |
/auth/login |
Untuk login |
DELETE |
/auth/logout |
Untuk logout |
4.
Membuat
Controller
buat controller dengan
nama AuthController yang terletak di folder app/Http/Controller
dan buat 3 method yaitu login() dan register(), serta generateRandomString().
<?php
namespace App\Http\Controllers;
use App\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;
class AuthController extends Controller
{
public function register(Request $request)
{
}
public function login(Request $request)
{
}
function generateRandomString($length = 80)
{
$karakkter = '012345678dssd9abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$panjang_karakter = strlen($karakkter);
$str = '';
for ($i = 0; $i < $length; $i++) {
$str .= $karakkter[rand(0, $panjang_karakter - 1)];
}
return $str;
}
}
5.
Membuat
Fungsi Register
1) Berhubung
kita akan membuat fitur register dan login menggunakan REST API maka kita bikin
2 routing : routes/web.php
$router->post("/register", "AuthController@register");
$router->post("/login", "AuthController@login");
2) Pembuatan fitur register
berada pada controller AuthController dengan method register(). Berikut ini
kode nya :
<?php
namespace App\Http\Controllers;
use App\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;
class AuthController extends Controller
{
public function register(Request $request)
{
$this->validate($request, [
'email' => 'required|unique:users|max:255',
'password' => 'required|min:6'
]);
$email = $request->input("email");
$password = $request->input("password");
$hashPwd = Hash::make($password);
$data = [
"email" => $email,
"password" => $hashPwd
];
if (User::create($data)) {
$out = [
"message" => "register_success",
"code" => 201,
];
} else {
$out = [
"message" => "vailed_regiser",
"code" => 404,
];
}
return response()->json($out, $out['code']);
}
public function login(Request $request)
{
}
function generateRandomString($length = 80)
{
$karakkter = '012345678dssd9abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$panjang_karakter = strlen($karakkter);
$str = '';
for ($i = 0; $i < $length; $i++) {
$str .= $karakkter[rand(0, $panjang_karakter - 1)];
}
return $str;
}
}
6.
Membuat Fungsi
Login
Untuk membuat fungsi login, mari ikuti langkah-langkah
dibawah ini.
1) Buka
file bootstrap/app.php, ubah menjadi seperti dibawah ini. Cari block ‘Register
Middleware.
Register Middleware
|--------------------------------------------------------------------------
|
| Next, we will register the middleware with the application. These can
| be global middleware that run before and after each request into a
| route or middleware that'll be assigned to some specific routes.
|
*/
// $app->middleware([
// App\Http\Middleware\ExampleMiddleware::class
// ]);
$app->routeMiddleware([
'login' => App\Http\Middleware\LoginMiddleware::class,
]);
2) Buat
file config/auth.php, dengan code seperti dibawah ini :
<?php
namespace App\Http\Controllers;
use App\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;
class AuthController extends Controller
{
public function register(Request $request)
{
$this->validate($request, [
'email' => 'required|unique:users|max:255',
'password' => 'required|min:6'
]);
$email = $request->input("email");
$password = $request->input("password");
$hashPwd = Hash::make($password);
$data = [
"email" => $email,
"password" => $hashPwd
];
if (User::create($data)) {
$out = [
"message" => "register_success",
"code" => 201,
];
} else {
$out = [
"message" => "vailed_regiser",
"code" => 404,
];
}
return response()->json($out, $out['code']);
}
public function login(Request $request)
{
$this->validate($request, [
'email' => 'required',
'password' => 'required|min:6'
]);
$email = $request->input("email");
$password = $request->input("password");
$user = User::where("email", $email)->first();
if (!$user) {
$out = [
"message" => "login_vailed",
"code" => 401,
"result" => [
"token" => null,
]
];
return response()->json($out, $out['code']);
}
if (Hash::check($password, $user->password)) {
$newtoken = $this->generateRandomString();
$user->update([
'token' => $newtoken
]);
$out = [
"message" => "login_success",
"code" => 200,
"result" => [
"token" => $newtoken,
]
];
} else {
$out = [
"message" => "login_vailed",
"code" => 401,
"result" => [
"token" => null,
]
];
}
return response()->json($out, $out['code']);
}
function generateRandomString($length = 80)
{
$karakkter = '012345678dssd9abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$panjang_karakter = strlen($karakkter);
$str = '';
for ($i = 0; $i < $length; $i++) {
$str .= $karakkter[rand(0, $panjang_karakter - 1)];
}
return $str;
}
}
3) Tambahkan
routes pada web.php
$router->post("/register", "AuthController@register");
$router->post("/login", "AuthController@login");
$router->get("/user", "UserController@index");
7. Uji Coba Register dan Login
1) Register
2) Login
Komentar
Posting Komentar