我這個不是教程,只是記錄。目標是修改laravel5默認的用戶系統,使之能迅速使用。註冊時在原有信息基礎上添加手機號。至於搭建laravel看參見:在ubuntu上部署apache和laravel5。
首先修改數據庫,添加phone列。由於我數據庫還是空的所以就先php artisan migrate:rollback,然後在database/migrations/2014_10_12_000000_create_users_table.php up函數中添加一行
$table->string('phone')->unique();
然後執行php artisan migrate這樣用戶數據庫就有phone了,而且phone還是唯一的。然後修改app/Http/Controllers/Auth/AuthController.php,主要是重載postRegister和postLogin兩個函數。原函數可從vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesAndRegistersUsers.php中複製過來,修改後是這樣的:
//app/Http/Controllers/Auth/AuthController.php <?php namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use Illuminate\Contracts\Auth\Guard; use Illuminate\Contracts\Auth\Registrar; use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers; use Illuminate\Http\Request; class AuthController extends Controller { use AuthenticatesAndRegistersUsers; //修改跳轉地址 protected $redirectTo = '/'; public function __construct(Guard $auth, Registrar $registrar) { $this->auth = $auth; $this->registrar = $registrar; $this->middleware('guest', ['except' => 'getLogout']); } public function postRegister(Request $request) { //數據驗證 $this->validate($request, ['phone'=>'required|numeric|unique:users',); $validator = $this->registrar->validator($request->all()); if ($validator->fails()) { $this->throwValidationException( $request, $validator ); } $this->auth->login($this->registrar->create($request->all())); return redirect($this->redirectPath()); } //這裏修改爲可以通過郵箱或手機登陸 public function postLogin(Request $request) { $field = filter_var($request->input('login'), FILTER_VALIDATE_EMAIL) ? 'email' : 'phone'; $request->merge([$field => $request->input('login')]); $this->validate($request, [ 'login' => 'required', 'password' => 'required', ]); $credentials = $request->only($field, 'password'); if ($this->auth->attempt($credentials, $request->has('remember'))) { return redirect()->intended($this->redirectPath()); } return redirect($this->redirectPath()) ->withInput($request->only('email', 'remember')) ->withErrors([ 'email' => $this->getFailedLoginMessage(), ]); } protected function getFailedLoginMessage() { return '郵箱或手機與密碼不匹配。'; } }
然後修改下位於/home/zenggl/case1/resources/views/auth下的登陸和註冊的表單,登錄表單修改一下email輸入框的name爲login,註冊表單添加一個name爲phone的輸入框。
密碼重置功能laravel5中也是實現好的,只用配置一下郵件發送就好了,我以QQ企業郵箱爲例配置。首先在.env中填入郵件服務器信息,然後設置config中的mail就好了:
//.env MAIL_DRIVER=smtp MAIL_HOST=smtp.exmail.qq.com MAIL_PORT=465 [email protected] MAIL_PASSWORD=yourPassword
//config/mail.php //視郵箱服務器而定,QQ郵箱要用ssl加密,且發信人要和發信帳號一致 'from' => ['address' => '[email protected]', 'name' => null], 'encryption' => 'ssl',
修改提示語言爲簡體中文。首先修改config/app.index中的locale值爲zh-cmn-Hans,然後複製一份resources/lang/en並重命名爲zh-cmn-Hans,最後修改validation.php就可以了。