Advertisement
  1. Code
  2. PHP
  3. Laravel

Otentikasi dengan Laravel 4

Scroll to top
Read Time: 23 min

() 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.

laravel-auth-twitter-bootstrap-installedlaravel-auth-twitter-bootstrap-installedlaravel-auth-twitter-bootstrap-installed

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.

laravel-auth-css-compiledlaravel-auth-css-compiledlaravel-auth-css-compiled

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:

laravel-auth-bootstrap-css-moved-to-publiclaravel-auth-bootstrap-css-moved-to-publiclaravel-auth-bootstrap-css-moved-to-public

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

laravel-auth-database-creationlaravel-auth-database-creationlaravel-auth-database-creation

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:

laravel-auth-home-pagelaravel-auth-home-pagelaravel-auth-home-page

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.

laravel-auth-add-main-css-filelaravel-auth-add-main-css-filelaravel-auth-add-main-css-file

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:

laravel-auth-register-pagelaravel-auth-register-pagelaravel-auth-register-page

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:

laravel-auth-displaying-errorslaravel-auth-displaying-errorslaravel-auth-displaying-errors

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

laravel-auth-successful-registrationlaravel-auth-successful-registrationlaravel-auth-successful-registration

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.

laravel-auth-logged-inlaravel-auth-logged-inlaravel-auth-logged-in

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.

laravel-auth-logout-linklaravel-auth-logout-linklaravel-auth-logout-link

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.

laravel-auth-logged-outlaravel-auth-logged-outlaravel-auth-logged-out

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.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.