() translation by (you can also view the original English article)
Otentikasi diperlukan untuk hampir semua jenis aplikasi web. Dalam tutorial ini, saya ingin menunjukkan kepada Anda bagaimana Anda dapat menciptakan sebuah aplikasi kecil otentikasi menggunakan Laravel 4. Kita akan mulai dari awal dengan menciptakan aplikasi Laravel kami menggunakan composer, menciptakan database, pemuatan Twitter Bootstrap, menciptakan tata letak yang utama, pendaftaran pengguna, log masuk dan keluar, dan melindungi rute menggunakan filter. Kami telah mendapat banyak kode untuk ditulis, jadi mari kita mulai!
Instalasi
Mari kita memulai tutorial ini dengan menyiapkan segala sesuatu yang kita perlukan untuk membangun aplikasi otentikasi. Kita pertama perlu men-download dan menginstal Laravel ditambah semua dependensi. Kami juga akan menggunakan Twitter Bootstrap populer untuk membuat aplikasi kami terlihat cantik. Kemudian kita akan melakukan sedikit tad konfigurasi, terhubung ke database kami dan membuat tabel yang diperlukan dan akhirnya, memulai server kami untuk memastikan semuanya bekerja seperti yang diharapkan.
Men-download
Mari kita gunakan composer untuk membuat aplikasi Laravel baru. Aku pertama akan mengubah direktori ke folder Sites
saya karena itu adalah dimana saya lebih memilih untuk menyimpan semua aplikasi saya:
1 |
cd Sites
|
Kemudian jalankan perintah berikut untuk men-download dan menginstal Laravel (saya bernama saya app laravel-auth
) dan semua dependensi:
1 |
composer create-project laravel/laravel laravel-auth |
Tambahkan di Twitter Bootstrap
Sekarang untuk mencegah aplikasi kami menderita nasib mengerikan dan jelek yang ditata oleh Anda benar-benar, kami akan memasukkan Twitter bootstrap dalam file composer.json
kami:
1 |
{ |
2 |
"name": "laravel/laravel", |
3 |
"description": "The Laravel Framework.", |
4 |
"keywords": ["framework", "laravel"], |
5 |
"require": { |
6 |
"laravel/framework": "4.0.*", |
7 |
"twitter/bootstrap": "*" |
8 |
}, |
9 |
|
10 |
// The rest of your composer.json file below .... |
... dan kemudian kita dapat menginstalnya:
1 |
composer update |
Sekarang jika Anda membuka aplikasi Anda ke editor teks Anda, saya menggunakan luhur, dan jika Anda melihat di folder vendor
Anda akan melihat kami memiliki Twitter Bootstrap di sini.



Sekarang secara default Bootstrap Twitter kami terdiri dari file .less
dan sebelum kita dapat mengkompilasi mereka ke dalam. File .CSS,
kita perlu menginstal semua dependensi bootstrap. Ini juga akan memungkinkan kita untuk menggunakan Makefile
yang disertakan dengan bootstrap Twitter untuk bekerja dengan framework (seperti mengkompilasi file dan menjalankan tes).
Catatan: Anda akan perlu npm untuk menginstal dependensi ini.
Pada terminal Anda, mari kita mengubah direktori ke vendor/twitter/bootstrap
dan menjalankan npm install
:
1 |
cd ~/Sites/laravel-auth/vendor/twitter/bootstrap
|
2 |
npm install
|
Dengan semua siap untuk pergi, kita sekarang dapat menggunakan Makefile
untuk mengkompilasi file .less
ke dalam CSS. Mari kita jalankan perintah berikut:
1 |
make bootstrap-css |
Anda sekarang harus melihat bahwa kita memiliki dua folder baru di dalam direktori vendor/twitter/bootstrap
kami bernama bootstrap/css
yang berisi file CSS kita bootstrap.



Sekarang kita dapat menggunakan file CSS bootstrap kemudian dalam tata letak kami, untuk style aplikasi kami.
Tapi, kita memiliki masalah! Kita perlu ini file CSS harus dapat diakses oleh publik, saat ini mereka berada di folder vendor
kami. Tapi ini adalah memperbaiki yang mudah! Kita dapat menggunakan publish
untuk mempublikasikan (move) mereka ke folder public/packages
, bahwa cara kita dapat menghubungkan CSS diperlukan file ke dalam template tata letak utama kami, yang kami akan membuat nanti.
Pertama, kami akan mengubah kembali ke root dari aplikasi Laravel kami dan kemudian jalankan artisan untuk memindahkan file:
1 |
cd ~/Sites/laravel-auth
|
2 |
php artisan asset:publish --path="vendor/twitter/bootstrap/bootstrap/css" bootstrap/css |
artisan perintah asset:publish
memungkinkan kami untuk menyediakan --oath
file yang kita ingin pindah ke direktori public/packages
. Dalam kasus ini, kita mengatakan itu untuk menerbitkan semua file CSS yang kami disusun sebelumnya dan menempatkan mereka dalam dua folder baru bernama bootstrap/css
. Direktori public
Anda sekarang harus terlihat seperti gambar di bawah, dengan Twitter Bootstrap CSS file kita sekarang dapat diakses publik:



Mengatur hak akses
Selanjutnya kita perlu untuk memastikan server web kami memiliki izin yang sesuai untuk menulis ke direktori app/storage
aplikasi kami. Dari dalam aplikasi Anda, jalankan perintah berikut:
1 |
chmod -R 755 app/storage |
Terhubung ke Database kami
Selanjutnya, kita perlu database yang dapat menggunakan aplikasi otentikasi kami untuk menyimpan pengguna kami di. Jadi jalankan database Anda lebih nyaman menggunakan, secara pribadi, saya lebih suka MySQL dengan PHPMyAdmin. Saya telah membuat database baru, kosong bernama: laravel-auth



Sekarang mari kita terhubung database ini ke aplikasi kita. Di bawah app/config
membuka database.php
. Masukkan kredensial sesuai database Anda, saya adalah sebagai berikut:
1 |
// Default Database Connection Name
|
2 |
|
3 |
'default' => 'mysql', |
4 |
|
5 |
// Database Connections
|
6 |
|
7 |
'connections' => array( |
8 |
|
9 |
'mysql' => array( |
10 |
'driver' => 'mysql', |
11 |
'host' => '127.0.0.1', |
12 |
'database' => 'laravel-auth', |
13 |
'username' => 'root', |
14 |
'password' => '', |
15 |
'charset' => 'utf8', |
16 |
'collation' => 'utf8_unicode_ci', |
17 |
'prefix' => '', |
18 |
),
|
19 |
|
20 |
// the rest of your database.php file's code ...
|
Membuat tabel Users
Dengan database kami diciptakan, tidak akan berguna kecuali jika kita memiliki sebuah tabel untuk menyimpan pengguna kami di. Mari kita gunakan tukang untuk membuat file migrasi baru bernama: create-users-table
:
1 |
php artisan migrate:make create-users-table |
Mari kita sekarang mengedit file baru dibuat migrasi kami membuat kami users
table menggunakan skema Builder. Kita akan mulai dengan up()
metode:
1 |
public function up() |
2 |
{
|
3 |
$table->increments('id'); |
4 |
$table->string('firstname', 20); |
5 |
$table->string('lastname', 20); |
6 |
$table->string('email', 100)->unique(); |
7 |
$table->string('password', 64); |
8 |
$table->timestamps(); |
9 |
}
|
Ini akan membuat sebuah tabel yang bernama users
dan itu akan memiliki field id
sebagai primary key, firstname
dan lastname
field, bidang email
yang memerlukan email untuk menjadi unik, dan akhirnya bidang password
(harus setidaknya 64 karakter panjangnya) serta beberapa timestamps
.
Sekarang kita perlu untuk mengisi metode down()
dalam kasus kita perlu kembali migrasi kami, drop tabel users
:
1 |
public function down() |
2 |
{
|
3 |
Schema::drop('users'); |
4 |
}
|
Dan sekarang kita dapat menjalankan migrasi membuat tabel users
kami:
1 |
php artisan migrate |
Memulai Server & menguji
Alright, aplikasi otentikasi kami datang bersama-sama dengan baik. Kami telah melakukan sedikit persiapan, mari kita memulai server kami dan pratinjau aplikasi kami dalam browser:
1 |
php artisan serve |
Great, server dijalankan dan kita dapat melihat halaman home kami:



Membuat tampilan App lebih bagus
Sebelum kita melangkah lebih jauh, saatnya untuk membuat tata letak utama file, yang akan menggunakan Twitter Bootstrap untuk memberikan aplikasi otentikasi kami sedikit style!
Membuat File Main Layout
Di bawah app/views/
membuat folder baru bernama layouts
dan di dalamnya, buat sebuah file baru yang bernama main.blade.php
dan mari kita menempatkan dalam struktur HTML dasar berikut:
1 |
<!DOCTYPE html>
|
2 |
<html lang="en"> |
3 |
<head>
|
4 |
<meta charset="utf-8"> |
5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
6 |
|
7 |
<title>Authentication App With Laravel 4</title> |
8 |
</head>
|
9 |
|
10 |
<body>
|
11 |
|
12 |
</body>
|
13 |
</html>
|
Menghubungkan di file CSS
Selanjutnya, kita perlu link dalam file CSS bootstrap kami serta file main
CSS, dalam tag head
, tepat di bawah title
kami:
1 |
<head>
|
2 |
<meta charset="utf-8"> |
3 |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
4 |
|
5 |
<title>Authentication App With Laravel 4</title> |
6 |
{{ HTML::style('packages/bootstrap/css/bootstrap.min.css') }} |
7 |
{{ HTML::style('css/main.css')}} |
8 |
</head>
|
Sekarang kita hanya perlu membuat file main.css
ini di mana kita dapat menambahkan style kita sendiri disesuaikan untuk aplikasi kami. Di bawah public
membuat folder baru bernama css
dan di dalamnya Buat sebuah file baru yang bernama main.css
.



Finishing tata letak utama
Dalam tag badan kami, mari kita membuat sebuah menu navigasi yang kecil dengan beberapa link untuk mendaftar dan masuk ke aplikasi kita:
1 |
<body>
|
2 |
|
3 |
<div class="navbar navbar-fixed-top"> |
4 |
<div class="navbar-inner"> |
5 |
<div class="container"> |
6 |
<ul class="nav"> |
7 |
<li>{{ HTML::link('users/register', 'Register') }}</li> |
8 |
<li>{{ HTML::link('users/login', 'Login') }}</li> |
9 |
</ul>
|
10 |
</div>
|
11 |
</div>
|
12 |
</div>
|
13 |
|
14 |
</body>
|
Perhatikan penggunaan beberapa Bootstrap kelas untuk stype navbar harus tepat. Di sini kita hanya menggunakan beberapa DIVs untuk membungkus daftar unordered link navigasi, cukup sederhana.
Untuk aplikasi kita, kita akan ingin memberikan pengguna kami pesan flash sederhana, seperti pesan sukses ketika pengguna mendaftar. Kami akan mengatur pesan ini flash dari dalam controller kami, tapi kami akan echo keluar pesan nilai di sini dalam layout kami. Jadi mari kita membuat lain div
dengan kelas .container
dan menampilkan pesan flash tersedia tepat setelah navbar kami:
1 |
<body>
|
2 |
|
3 |
<div class="navbar navbar-fixed-top"> |
4 |
<div class="navbar-inner"> |
5 |
<div class="container"> |
6 |
<ul class="nav"> |
7 |
<li>{{ HTML::link('users/register', 'Register') }}</li> |
8 |
<li>{{ HTML::link('users/login', 'Login') }}</li> |
9 |
</ul>
|
10 |
</div>
|
11 |
</div>
|
12 |
</div>
|
13 |
|
14 |
|
15 |
<div class="container"> |
16 |
@if(Session::has('message')) |
17 |
<p class="alert">{{ Session::get('message') }}</p> |
18 |
@endif |
19 |
</div>
|
20 |
|
21 |
</body>
|
Untuk menampilkan pesan flash, aku pertama kali menggunakan blade if
statement untuk memeriksa jika kita memiliki pesan flash untuk menampilkan. Pesan kami flash akan tersedia dalam Session di bawah message
. Jadi kita dapat menggunakan metode Session::has()
untuk memeriksa pesan itu. Jika yang mengevaluasi true, kita membuat sebuah paragraf dengan kelas bootstrap Twitter alert
dan kita sebut Session::get()
metode untuk menampilkan pesan nilai.
Sekarang akhirnya, setidaknya untuk file tata letak kami, mari kita echo keluar sebuah variabel $content
, tepat setelah flash message. Ini akan memungkinkan kami untuk memberitahu kami controller untuk menggunakan file layout ini, dan view kami akan ditampilkan sebagai pengganti variabel $content
ini, di sini dalam layout:
1 |
<body>
|
2 |
|
3 |
<div class="navbar navbar-fixed-top"> |
4 |
<div class="navbar-inner"> |
5 |
<div class="container"> |
6 |
<ul class="nav"> |
7 |
<li>{{ HTML::link('users/register', 'Register') }}</li> |
8 |
<li>{{ HTML::link('users/login', 'Login') }}</li> |
9 |
</ul>
|
10 |
</div>
|
11 |
</div>
|
12 |
</div>
|
13 |
|
14 |
|
15 |
<div class="container"> |
16 |
@if(Session::has('message')) |
17 |
<p class="alert">{{ Session::get('message') }}</p> |
18 |
@endif |
19 |
|
20 |
{{ $content }} |
21 |
</div>
|
22 |
|
23 |
</body>
|
Kustom Styling
Sekarang bahwa kita memiliki layout lengkap, kita hanya perlu untuk menambahkan beberapa aturan CSS kustom kecil ke file main.css
kami untuk menyesuaikan layout. Silahkan menambahkan sedikit CSS, itu cukup jelas:
1 |
body { |
2 |
padding-top: 40px; |
3 |
}
|
4 |
|
5 |
.form-signup, .form-signin { |
6 |
width: 400px; |
7 |
margin: 0 auto; |
8 |
}
|
Saya menambahkan hanya sejumlah sedikit padding di atas tag body
untuk mencegah navbar kami tumpang tindih isi utama kami. Kemudian saya menargetkan Bootstrap .form-signup
dan login .form
kelas, yang kami akan menerapkan ke foem pendaftaran dan login untuk mengatur width dan center page.
Menciptakan halaman Register
Sekarang saatnya untuk mulai membangun bagian pertama dari aplikasi otentikasi kami dan itulah halaman Register.
Users Controller
Kita akan mulai dengan menciptakan UsersController
baru dalam folder app/controllers
kami dan di dalamnya, kita mendefinisikan kelas UsersController
kami:
1 |
<?php
|
2 |
|
3 |
class UsersController extends BaseController { |
4 |
|
5 |
}
|
6 |
?>
|
Selanjutnya, mari kita memberitahu controller ini menggunakan layout main.blade.php
kami. Di bagian atas dari controller kami mengatur properti $layout
:
1 |
<?php
|
2 |
|
3 |
class UsersController extends BaseController { |
4 |
protected $layout = "layouts.main"; |
5 |
}
|
6 |
?>
|
Sekarang dalam UsersController
kita, kita perlu tindakan untuk halaman register. Aku kasih nama getRegister
tindakan saya:
1 |
public function getRegister() { |
2 |
$this->layout->content = View::make('users.register'); |
3 |
}
|
Di sini kita hanya menetapkan properti layout content
(ini adalah $content
variabel kami echo akan keluar dalam file layout) untuk menampilkan file tampilan users.register
.
Users Controller Routes
Dengan controller yang kita buat selanjutnya kita perlu men-setup rute untuk semua action yang kita mungkin menciptakan dalam controller kami. Dalam file app/routes.php
kami mari kita pertama menghapus default /
rute dan kemudian tambahkan kode berikut untuk membuat rute UsersController
kami:
1 |
Route::controller('users', 'UsersController'); |
Sekarang setiap kali bahwa kita membuat action baru, akan tersedia menggunakan URI dalam format berikut: /users/actionName
. Sebagai contoh, kita memiliki action getRegister
, kita dapat mengakses ini menggunakan URI berikut: /users/register
.
Perhatikan bahwa kami tidak menyertakan "get" bagian dari nama aksi di URI, "get" adalah hanya HTTP verb yang menanggapi action.
Membuat Register View
Dalam app/views
buat folder baru bernama users
. Ini akan terus semua UsersController
kami view file. Di dalam folder users
buat sebuah file baru yang bernama register.blade.php
dan menempatkan kode berikut itu:
1 |
{{ Form::open(array('url'=>'users/create', 'class'=>'form-signup')) }} |
2 |
<h2 class="form-signup-heading">Please Register</h2> |
3 |
|
4 |
<ul> |
5 |
@foreach($errors->all() as $error) |
6 |
<li>{{ $error }}</li> |
7 |
@endforeach |
8 |
</ul> |
9 |
|
10 |
{{ Form::text('firstname', null, array('class'=>'input-block-level', 'placeholder'=>'First Name')) }} |
11 |
{{ Form::text('lastname', null, array('class'=>'input-block-level', 'placeholder'=>'Last Name')) }} |
12 |
{{ Form::text('email', null, array('class'=>'input-block-level', 'placeholder'=>'Email Address')) }} |
13 |
{{ Form::password('password', array('class'=>'input-block-level', 'placeholder'=>'Password')) }} |
14 |
{{ Form::password('password_confirmation', array('class'=>'input-block-level', 'placeholder'=>'Confirm Password')) }} |
15 |
|
16 |
{{ Form::submit('Register', array('class'=>'btn btn-large btn-primary btn-block'))}} |
17 |
{{ Form::close() }} |
Di sini kita menggunakan kelas Form
untuk membuat form regiser. Pertama kita memanggil metode open()
, passing dalam array pilihan. Kami kirim formulir kirim ke URI dari users/create
dengan set url
key. URI ini akan digunakan untuk proses pendaftaran pengguna. Kami akan menangani berikutnya ini. Setelah menetapkan url
kami kemudian memberikan bentuk kelas form-signup
.
Setelah membuka form, kita hanya bisa h2
heading dengan kelas .form-signup-heading
.
Selanjutnya, kami menggunakan loop @foreach
, mengulang melalui semua bentuk validasi kesalahan pesan dan menampilkan setiap $error
di unordered list.
Setelah kesalahan validasi form pesan, maka kami membuat beberapa bentuk Field input, masing-masing dengan kelas input-block-level
dan placeholder value. Kami memiliki input untuk firstname, lastname, email, password, dan password konfirmasi field. Argumen kedua ke metode text()
diatur ke null
, karena kita menggunakan placeholder
, kita tidak perlu untuk mengatur atribut nilai field input, sehingga hanya menetapkan untuk null
dalam kasus ini.
Setelah Field input, kami kemudian membuat tombol Kirim kami dan menerapkan beberapa kelas yang berbeda untuk itu sehingga Twitter bootstrap menangani styling untuk kita.
Akhirnya, kami hanya menutup sebuah form dengan menggunakan metode close()
.
Pastikan untuk memulai server Anda, beralih ke browser favorit Anda, dan jika kita melihat isi register/ http://localhost:8000/users/register
Anda akan melihat halaman daftar Anda:



Pengolahan data pada Form registrasi
Sekarang jika Anda mencoba mengisi formulir daftar kolom dan menekan tombol Register Anda akan memiliki telah disambut dengan NotFoundHttpException
, dan ini adalah karena kita memiliki ada rute yang sesuai dengan users/create
URI, karena kami tidak memiliki tindakan untuk memproses form submission. Jadi itu adalah langkah berikutnya!
Membuat aksi postCreate
Dalam UsersController
Anda mari kita membuat tindakan lain yang bernama postCreate
:
1 |
public function postCreate() { |
2 |
|
3 |
}
|
Sekarang tindakan ini perlu menangani pengolahan data pada form dengan memvalidasi data dan baik menampilkan pesan error validasi atau itu harus membuat pengguna baru, hashing password pengguna, dan menyimpan pengguna ke dalam database.
Validasi form
Mari kita mulai dengan memvalidasi data pada form. Pertama kita perlu membuat aturan validasi kami bahwa kami akan memvalidasi data formulir. Saya lebih suka menyimpan aturan validasi saya dalam model saya seperti itu konvensi yang saya digunakan untuk, dari bekerja dengan framework lain. Secara default, Laravel secara default dengan User.php
model sudah dibuat untuk Anda.
Pastikan Anda tidak menghapus model User ini atau menghapus salah satu kode yang sudah ada, karena mengandung kode baru yang diperlukan untuk Laravel 4 otentikasi untuk bekerja dengan benar. Model User Anda harus implement UserInterface
dan RemindableInterface
serta implement metode getAuthIdentifier()
dan getAuthPassword()
.
Di bawah app/models
terbuka bahwa file User.php
dan di atas, tambahkan kode berikut:
1 |
public static $rules = array( |
2 |
'firstname'=>'required|alpha|min:2', |
3 |
'lastname'=>'required|alpha|min:2', |
4 |
'email'=>'required|email|unique:users', |
5 |
'password'=>'required|alpha_num|between:6,12|confirmed', |
6 |
'password_confirmation'=>'required|alpha_num|between:6,12' |
7 |
);
|
Di sini saya 'm memvalidasi field firstname
dan lastname
untuk memastikan mereka hadir, hanya berisi karakter Alfa, dan bahwa mereka adalah sedikitnya dua karakter panjangnya. Selanjutnya, saya memvalidasi bidang email
untuk memastikan bahwa itu sekarang, bahwa itu adalah alamat email yang valid, dan bahwa itu unik untuk tabel pengguna, karena kita tidak ingin memiliki duplikat email alamat untuk pengguna kami. Akhirnya, saya memvalidasi bidang password
dan password_confirmation
. Saya memastikan mereka keduanya menyajikan, mengandung hanya karakter alfa-numerik dan bahwa mereka adalah antara enam dan dua belas karakter panjangnya. Selain itu, perhatikan validasi confirmed
rule, hal ini membuat yakin bahwa bidang password
adalah persis sama dengan bidang password_confirmation
yang cocok, untuk memastikan pengguna telah memasukkan dalam password yang benar.
Sekarang bahwa kita memiliki aturan validasi kami, kita dapat menggunakan ini di UsersController
kami untuk memvalidasi form. Dalam UsersController
Anda postCreate
action, mari kita mulai dengan memeriksa jika data melewati validasi, tambahkan kode berikut:
1 |
public function postCreate() { |
2 |
$validator = Validator::make(Input::all(), User::$rules); |
3 |
|
4 |
if ($validator->passes()) { |
5 |
// validation has passed, save user in DB
|
6 |
} else { |
7 |
// validation has failed, display error messages
|
8 |
}
|
9 |
}
|
10 |
}
|
Kita mulai dengan menciptakan sebuah objek validator yang bernama $validator
dengan memanggil metode User:: validate()
. Ini menerima dua argumen, masukan form yang di submit harus divalidasi dan aturan validasi yang data harus divalidasi juga. Kita bisa ambil data form yang dikirim dengan memanggil metode Input::all()
dan kami melewati itu sebagai argumen pertama. Kita bisa mendapatkan aturan validasi kami yang kami buat pada model User
kami dengan mengakses pengguna statis User::$rules
properti dan passing sebagai argumen kedua.
Setelah kami telah membuat objek validator, kita memanggil metode passes()
. Ini akan mengembalikan true
atau false
dan kami menggunakan ini dalam if
statemtn untuk memeriksa apakah data kami telah lulus validasi.
Dalam kami if
statement, jika validasi telah berlalu, tambahkan kode berikut:
1 |
if ($validator->passes()) { |
2 |
$user = new User; |
3 |
$user->firstname = Input::get('firstname'); |
4 |
$user->lastname = Input::get('lastname'); |
5 |
$user->email = Input::get('email'); |
6 |
$user->password = Hash::make(Input::get('password')); |
7 |
$user->save(); |
8 |
|
9 |
return Redirect::to('users/login')->with('message', 'Thanks for registering!'); |
10 |
} else { |
11 |
// validation has failed, display error messages
|
12 |
}
|
Selamama data yang di submit user lulus validasi, kita membuat sebuah instance baru dari model User kami: new User
; menyimpannya ke dalam variabel $user
. Kami kemudian dapat menggunakan objek $user
dan menetapkan masing-masing properti user menggunakan data form yang di submit. Kita dapat mengambil data yang submit secara individual menggunakan metode Input::get('fieldName')
. dimana fieldName
dikenal adalah nilai bidang Anda ingin mengambil. Di sini kita telah meraih firstname, lastname, dan bidang email digunakan untuk user baru kami. Kita juga meraih nilai bidang passwrod, tapi kami tidak hanya ingin menyimpan sandi dalam database teks, jadi kami menggunakan metode Hash:: make()
untuk hash password dikirim untuk kita sebelum menyimpannya. Akhirnya, kami menyimpan pengguna ke dalam database dengan memanggil method save()
$user
objek.
Setelah membuat user baru, kami kemudian mengarahkan pengguna ke halaman login (kami akan membuat halaman login di beberapa saat) menggunakan metode Redirect:: to()
. Ini hanya membutuhkan waktu di URI dari mana Anda ingin mengarahkan ulang ke. Kami juga rantai pada panggilan metode with()
untuk memberikan pengguna flash message membiarkan mereka tahu bahwa mereka telah berhasil.
Sekarang jika validasi tidak lulus, kita perlu redisplay halaman daftar, bersama dengan beberapa pesan kesalahan validasi, dengan input yang tadi, sehingga pengguna dapat memperbaiki kesalahan mereka. Dalam statement else
, tambahkan kode berikut:
1 |
if ($validator->passes()) { |
2 |
$user = new User; |
3 |
$user->firstname = Input::get('firstname'); |
4 |
$user->lastname = Input::get('lastname'); |
5 |
$user->email = Input::get('email'); |
6 |
$user->password = Hash::make(Input::get('password')); |
7 |
$user->save(); |
8 |
|
9 |
return Redirect::to('users/login')->with('message', 'Thanks for registering!'); |
10 |
} else { |
11 |
return Redirect::to('users/register')->with('message', 'The following errors occurred')->withErrors($validator)->withInput(); |
12 |
}
|
Di sini kita hanya mengarahkan ulang pengguna ke laman daftar dengan pesan flash membiarkan mereka tahu beberapa kesalahan telah terjadi. Kami pastikan untuk menampilkan pesan error validasi dengan memanggil metode withErrors($validator)
dan lewat di objek $validator
untuk itu. Akhirnya, kita memanggil metode withInput()
sehingga form mengingat apa yang pengguna mengetik awalnya dan itu akan membuat itu bagus dan mudah bagi pengguna untuk memperbaiki kesalahan-kesalahan.
Menambahkan dalam CSRF sebelum Filter
Sekarang kita perlu memastikan bahwa untuk melindungi tindakan posting kita dari serangan CSRF dengan menetapkan CSRF sebelum penyaring dalam metode konstruktor UsersController
kami. Di atas UsersController
Anda menambahkan kode berikut:
1 |
public function __construct() { |
2 |
$this->beforeFilter('csrf', array('on'=>'post')); |
3 |
}
|
Dalam konstruktor kami, kita memanggil metode beforeFilter()
dan lulus dalam csrf
string, sebagai argumen pertama. CSRF
adalah filter yang kita inginkan untuk menerapkan tindakan-tindakan kita. Kemudian kami passing dalam sebuah array sebagai argumen kedua dan kirim ke hanya menerapkan penyaring pada POST permintaan. Dengan melakukan ini, form akan melewati sepanjang CSRF token setiap kali mereka disubmit. Ini CSRF before filter akan memastikan bahwa semua posting permintaan App kami berisi token ini, memberikan kami keyakinan bahwa posting permintaan tidak dikeluarkan untuk aplikasi kita dari sumber eksternal.
Menciptakan halaman Login
Sebelum Anda lari dan mencoba halaman daftar Anda, pertama kita perlu menciptakan halaman Login sehingga ketika kami pengiriman form registrasi berhasil, kita tidak mendapatkan kesalahan. Ingat, jika melewati validasi form, kita menyimpan pengguna dan mengarahkan mereka ke halaman login. Kami saat ini tidak memiliki halaman login ini meskipun, jadi mari kita membuat itu!
Masih dalam UsersController
Anda, membuat tindakan baru yang bernama getLogin
dan tempat pada kode berikut:
1 |
public function getLogin() { |
2 |
$this->layout->content = View::make('users.login'); |
3 |
}
|
Ini akan menampilkan file tampilan users.login
. Kita sekarang perlu untuk membuat file tampilan yang. Di app/views/users
Buat sebuah file baru yang bernama login.blade.php
dan tambahkan kode berikut:
1 |
{{ Form::open(array('url'=>'users/signin', 'class'=>'form-signin')) }} |
2 |
<h2 class="form-signin-heading">Please Login</h2> |
3 |
|
4 |
{{ Form::text('email', null, array('class'=>'input-block-level', 'placeholder'=>'Email Address')) }} |
5 |
{{ Form::password('password', array('class'=>'input-block-level', 'placeholder'=>'Password')) }} |
6 |
|
7 |
{{ Form::submit('Login', array('class'=>'btn btn-large btn-primary btn-block'))}} |
8 |
{{ Form::close() }} |
Kode ini sangat mirip dengan kode yang kita digunakan dalam view register
, sehingga aku akan menyederhanakan penjelasan ini waktu untuk hanya apa berbeda. Untuk form ini, kami memiliki itu submit ke users/signin
URI dan kami mengubah kelas formulir untuk .form-signin
. h2
telah berubah untuk mengatakan "Silahkan Login" dan kelasnya juga diubah menjadi .form-signin-heading
. Selanjutnya, kami memiliki dua kolom form sehingga user dapat busa memasukan email dan password, dan kemudian akhirnya submit tombol "Login".
Mari kita Register User baru!
Akhirnya kita berada pada titik di mana kita dapat mencoba form registrasi. Tentu saja, fungsi login tidak bekerja dulu, tapi kita akan mendapatkan bahwa cukup cepat. Kita hanya perlu halaman login ada sehingga halaman registrasi kami akan bekerja dengan baik. Pastikan server Anda masih berjalan, beralih ke browser Anda, dan kunjungi http://localhost:8000/users/register
. Cobalah memasukkan dalam beberapa data tidak valid pengguna untuk menguji pesan error validasi form. Berikut adalah apa yang tampak seperti halaman saya dengan user tidak valid:



Sekarang cobalah mendaftarkan data user yang valid. Kali ini kita mendapatkan diarahkan ke halaman login kami bersama dengan pesan sukses kami, Hebat!



Log In
Jadi kita telah berhasil terdaftar user baru dan kami memiliki sebuah halaman login, tetapi kita masih tidak dapat login. Kita sekarang perlu untuk membuat tindakan postSignin
untuk kami users/signin
URI, yang mengajukan form login ke. Mari kita kembali ke UsersController
kami dan membuat tindakan baru bernama postSignin
:
1 |
public function postSignin() { |
2 |
|
3 |
}
|
Sekarang mari kita log pengguna dalam, menggunakan data yang dikirim dari login form. Menambahkan kode berikut ke dalam tindakan postSignin()
Anda:
1 |
if (Auth::attempt(array('email'=>Input::get('email'), 'password'=>Input::get('password')))) { |
2 |
return Redirect::to('users/dashboard')->with('message', 'You are now logged in!'); |
3 |
} else { |
4 |
return Redirect::to('users/login') |
5 |
->with('message', 'Your username/password combination was incorrect') |
6 |
->withInput(); |
7 |
}
|
Di sini kita mencoba untuk log pengguna dalam, menggunakan metode Auth::attempt()
. Kita hanya passing dalam array yang berisi user email dan sandi yang disubmit dari login form. Metode ini akan mengembalikan true
atau false
jika kredensial pengguna memvalidasi. Jadi kita dapat menggunakan attempt()
metode dalam if
statement. Jika pengguna telah masuk, kami hanya mengarahkan mereka ke halaman tampilan dashboard
dan memberi mereka pesan sukses. Jika tidak, kredensial pengguna melakukan tidak memvalidasi dan dalam hal ini kami mengarahkan mereka ke halaman login, dengan pesan kesalahan, dan menampilkan old input sehingga pengguna dapat mencoba lagi.
Membuat Dashboard
Sekarang sebelum Anda mencoba untuk login dengan user baru terdaftar Anda, kita perlu membuat halaman dashboard itu dan melindunginya dari unauthorized user. Halaman dashboard harus hanya dapat diakses oleh user yang sudah register dan login untuk aplikasi kita. Sebaliknya, kalau seorang pengguna yang tidak sah berusaha untuk mengunjungi dashboard kami akan mengarahkan mereka dan meminta bahwa mereka login terlebih dahulu.
Sementara masih dalam UsersController
Anda mari kita membuat tindakan baru bernama getDashboard
:
1 |
public function getDashboard() { |
2 |
|
3 |
}
|
Dan dalam tindakan ini kami hanya akan menampilkan file tampilan users.dashboard
:
1 |
public function getDashboard() { |
2 |
$this->layout->content = View::make('users.dashboard'); |
3 |
}
|
Selanjutnya, kita perlu untuk melindunginya dari pengguna yang tidak sah dengan menggunakan auth
before filter. Dalam konstruktor kami UsersController
, tambahkan kode berikut:
1 |
public function __construct() { |
2 |
$this->beforeFilter('csrf', array('on'=>'post')); |
3 |
$this->beforeFilter('auth', array('only'=>array('getDashboard'))); |
4 |
}
|
Ini akan menggunakan filter auth
, yang memeriksa jika pengguna saat ini masuk. Jika pengguna tidak masuk, mereka bisa diarahkan ke halaman login, yang pada dasarnya menolak akses pengguna. Perhatikan bahwa saya juga pasing dalam array sebagai argumen kedua, dengan menetapkan omly
key, saya dapat memberitahu ini sebelum filter untuk hanya berlaku untuk tindakan yang disediakan. Dalam kasus ini, saya mengatakan untuk melindungi hanya tindakan getDashboard
.
Customizing Filter
Secara default auth
filter akan mengarahkan pengguna ke /login
URI, ini tidak bekerja untuk aplikasi kami meskipun. Kita perlu untuk memodifikasi filter ini sehingga pengalihan untuk users/login
URI sebaliknya, jika tidak mendapatkan error. Buka app/filters.php
dan di bagian Authentication Filters, mengubah filter auth untuk mengarahkan ulang users/login
, seperti ini:
1 |
/*
|
2 |
|--------------------------------------------------------------------------
|
3 |
| Authentication Filters
|
4 |
|--------------------------------------------------------------------------
|
5 |
|
|
6 |
| The following filters are used to verify that the user of the current
|
7 |
| session is logged into this application. The "basic" filter easily
|
8 |
| integrates HTTP Basic authentication for quick, simple checking.
|
9 |
|
|
10 |
*/
|
11 |
|
12 |
Route::filter('auth', function() |
13 |
{
|
14 |
if (Auth::guest()) return Redirect::guest('users/login'); |
15 |
});
|
Membuat Dashboard View
Sebelum kita dapat login user ke aplikasi kita kita perlu membuat file tampilan dashboard
. Di app/views/users
Buat sebuah file baru yang bernama dashboard.blade.php
dan menyisipkan potongan kode berikut:
1 |
<h1>Dashboard</h1> |
2 |
|
3 |
<p>Welcome to your Dashboard. You rock!</p> |
Di sini saya sedang menampilkan sebuah paragraf yang sangat sederhana untuk membiarkan pengguna tahu mereka sekarang dalam Dashboard mereka.
Mari kita Login!
Kita sekarang harus bisa login. Browse ke http://localhost:8000/users/login
, masukkan kredensial pengguna Anda, dan mencobanya.



Sukses!
Menampilkan link navigasi sesuai
OK, kita sekarang dapat mendaftar dan login ke aplikasi kita, sangat keren! Tapi kita memiliki sedikit permainan kata-kata di sini, jika Anda melihat menu navigasi kami, meskipun kami masuk, Anda dapat melihat tombol mendaftarkan diri dan login masih dapat dilihat. Idealnya, kami ingin ini untuk hanya menampilkan saat pengguna belum masuk. Setelah pengguna melakukan login meskipun, kita ingin menampilkan link keluar. Untuk membuat perubahan ini, mari kita membuka file main.blade.php
lagi. Berikut adalah apa yang tampak seperti kode navbar kami saat ini:
1 |
<div class="navbar navbar-fixed-top"> |
2 |
<div class="navbar-inner"> |
3 |
<div class="container"> |
4 |
<ul class="nav"> |
5 |
<li>{{ HTML::link('users/register', 'Register') }}</li> |
6 |
<li>{{ HTML::link('users/login', 'Login') }}</li> |
7 |
</ul>
|
8 |
</div>
|
9 |
</div>
|
10 |
</div>
|
Mari kita Ubah ini sedikit, mengganti kode navbar kami asli, dengan berikut:
1 |
<div class="navbar navbar-fixed-top"> |
2 |
<div class="navbar-inner"> |
3 |
<div class="container"> |
4 |
<ul class="nav"> |
5 |
@if(!Auth::check()) |
6 |
<li>{{ HTML::link('users/register', 'Register') }}</li> |
7 |
<li>{{ HTML::link('users/login', 'Login') }}</li> |
8 |
@else |
9 |
<li>{{ HTML::link('users/logout', 'logout') }}</li> |
10 |
@endif |
11 |
</ul>
|
12 |
</div>
|
13 |
</div>
|
14 |
</div>
|
Semua yang telah kulakukan dibungkus Tag li
kami untuk navbar kami if
statement untuk memeriksa jika pengguna tidak masuk, menggunakan! Metode !Auth::Check()
. Metode ini mengembalikan true
jika pengguna log in, sebaliknya, false
. Jadi jika pengguna tidak masuk, kami menampilkan daftar dan link masuk, jika tidak, pengguna masuk dan kami menampilkan logout link, sebaliknya.



Log Out
Sekarang bahwa navbar kami menampilkan link yang sesuai, berdasarkan pengguna login status, mari kita membungkus aplikasi ini dengan menciptakan tindakan getLogout
, untuk benar-benar log pengguna. Dalam UsersController
Anda membuat tindakan baru bernama getLogout
:
1 |
public function getLogout() { |
2 |
|
3 |
}
|
Sekarang tambahkan dalam potongan berikut kode untuk log user:
1 |
public function getLogout() { |
2 |
Auth::logout(); |
3 |
return Redirect::to('users/login')->with('message', 'Your are now logged out!'); |
4 |
}
|
Di sini kita memanggil metode Auth::logout()
, yang menangani login user bagi kita. Setelah itu, kami mengarahkan ulang pengguna ke halaman login dan memberi mereka pesan flash membiarkan mereka tahu bahwa mereka telah logout.



Kesimpulan
Dan menyimpulkan bahwa Laravel 4 otentikasi tutorial ini. Saya harap Anda telah menemukan ini membantu dalam mengatur auth untuk aplikasi Laravel Anda. Jika Anda memiliki masalah atau pertanyaan, jangan ragu untuk bertanya di komentar dan saya akan mencoba yang terbaik untuk membantu Anda keluar. Anda dapat checkout kode sumber lengkap untuk app demo kecil yang kami bangun selama tutorial ini pada Github. Terima kasih untuk membaca.