07/09/2018, 17:33

Bài 23: Authentication Trong Laravel (Register)

Ở bài trước chúng ta đã tìm hiểu về authentication default của Laravel rồi, nhưng giờ đây bảng của bạn không chỉ có bằng ý cột mà nhiều hơn thì chức năng đăng ký của Laravel sẽ không sử dụng được? Sau khi đọc xong bài này bạn sẽ giải quyết được vấn đề đó. 1, Tạo database. - Đầu tiên chúng ta ...

Ở bài trước chúng ta đã tìm hiểu về authentication default của Laravel rồi, nhưng giờ đây bảng của bạn không chỉ có bằng ý cột mà nhiều hơn thì chức năng đăng ký của Laravel sẽ không sử dụng được? Sau khi đọc xong bài này bạn sẽ giải quyết được vấn đề đó.

1, Tạo database.

- Đầu tiên chúng ta cần phải tạo ra một bảng dữ liệu để thự hiện chức năng đăng nhập. Các bạn truy cập vào database/migrations mở tệp 2014_10_12_000000_create_users_table.php và chỉnh sửa một số thông số như sau:

<?php

use IlluminateSupportFacadesSchema;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateDatabaseMigrationsMigration;

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('username')->unique();
            $table->string('email');
            $table->string('password');
            $table->integer('level');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('users');
    }
}

Sau đó các bạn chạy migration (ai không biết xem lại series nhé).

2, Chỉnh sửa form.

-Sau Khi đã có database rồi giờ chúng ta cần làm là chỉnh sửa lại các trường trong trong giao diện register của Laravel (Giao diện rigister mặc định sẽ nằm ở resources/views/auth/register.blade.php) như sau:

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="panel panel-default">
                <div class="panel-heading">Register</div>
                <div class="panel-body">
                    <form class="form-horizontal" role="form" method="POST" action="{{ url('/register') }}">
                        {{ csrf_field() }}

                        <div class="form-group{{ $errors->has('name') ? ' has-error' : ' }}">
                            <label for="name" class="col-md-4 control-label">Name</label>

                            <div class="col-md-6">
                                <input id="name" type="text" class="form-control" name="name" value="{{ old('name') }}" required autofocus>

                                @if ($errors->has('name'))
                                    <span class="help-block">
                                        <strong>{{ $errors->first('name') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>
                                    
                        <div class="form-group{{ $errors->has('username') ? ' has-error' : ' }}">
                            <label for="email" class="col-md-4 control-label">Username</label>

                            <div class="col-md-6">
                                <input id="email" type="text" class="form-control" name="username" value="{{ old('username') }}" required>

                                @if ($errors->has('username'))
                                    <span class="help-block">
                                        <strong>{{ $errors->first('username') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group{{ $errors->has('email') ? ' has-error' : ' }}">
                            <label for="email" class="col-md-4 control-label">E-Mail Address</label>

                            <div class="col-md-6">
                                <input id="email" type="email" class="form-control" name="email" value="{{ old('email') }}" required>

                                @if ($errors->has('email'))
                                    <span class="help-block">
                                        <strong>{{ $errors->first('email') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group{{ $errors->has('password') ? ' has-error' : ' }}">
                            <label for="password" class="col-md-4 control-label">Password</label>

                            <div class="col-md-6">
                                <input id="password" type="password" class="form-control" name="password" required>

                                @if ($errors->has('password'))
                                    <span class="help-block">
                                        <strong>{{ $errors->first('password') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group">
                            <label for="password-confirm" class="col-md-4 control-label">Confirm Password</label>

                            <div class="col-md-6">
                                <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required>
                            </div>
                        </div>

                        <div class="form-group">
                            <div class="col-md-6 col-md-offset-4">
                                <button type="submit" class="btn btn-primary">
                                    Register
                                </button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

Giờ các bạn run project lên và vào register (như bài trước) và thấy giao diện đã được thêm input username rồi đúng không? Nhưng khi các bạn đăng ký thì nó sẽ bị lỗi (không tin thử là biết) vì các bạn mới chỉ khai báo giao diện mà chưa báo cho Laravel biết là phải thêm input username vào.

3, Chỉnh sửa hệ thống.

Controllers

-Giờ muốn sử dụng được mọi người  tiếp tục tìm đến controllers RegisterController (đường dẫn: app/Http/Controllers/Auth/RegisterController.php) và thay đổi 2 function validatorcreate như sau:

 protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|max:255',
            'email' => 'required|email|max:255',
            'username' => 'required|max:16|unique:users',
            'password' => 'required|min:6|confirmed',
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return User
     */
    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'username' => $data['username'],
            'level'=>0,
            'password' => bcrypt($data['password']),
        ]);
    }

Chú thích: Ở đây mình đã khai báo validator thêm cho input username và insert vào username +level(mình không cho hiện ở register nên để mặc định = 0) vào table users.

Model

Vì bạn có thêm 2 cột username và level vào bảng user nên mình sẽ phải báo cho model user (đườn dẫn : app/User.php) biết như sau:

<?php

namespace App;

use IlluminateNotificationsNotifiable;
use IlluminateFoundationAuthUser as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password','username','level',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

.-OK. Giờ đã xong mọi người có thể sử dụng được chức năng Đăng ký (register) của Laravel

3, Lời kết.

- Phần trên mình đã hướng dẫn mọi người custom lại auth register của Laravel rồi và phần trên chỉ là demo thêm 2 trường, còn các bạn muốn làm bao nhiêu trường cũng được.

- Phần tiếp theo mình sẽ hướng dẫn các bạn custom lại login của Laravel.

0