Laravel- Auth登錄驗證

-- 文章僅供個人學習參考,如有不恰當的地方,希望前輩們指教。--

1、修改config\auth.php配置文件

'model' => App\Model\Users::class,
'table' => 'users',

2、 修改Users模型類如下:

use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Authenticatable;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Foundation\Auth\Access\Authorizable;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;

class Users extends Model implements AuthenticatableContract,  AuthorizableContract,  CanResetPasswordContract
{
  //使用auth驗證必須繼承接口
  use Authenticatable, Authorizable, CanResetPassword;
  //修改爲自己的用戶表
  protected $table = 'users';
 
  protected $fillable = ['name', 'email', 'password'];

  protected $hidden = ['password', 'remember_token'];
}

3、修改AuthController控制器

class AuthController extends Controller
{
  use ThrottlesLogins /* , AuthenticatesAndRegistersUsers*/ ; //因爲沒有註冊功能可以將AuthenticatesAndRegistersUsers註釋掉
  protected $redirectPath = '/admin';
  protected $redirectAfterLogout = '/auth/login';  //註銷後的跳轉地址

  public function __construct()
  {
    $this->middleware('guest', ['except' => ['getlogout']]); //在中間件中排除 getlogout函數 ,否則無法註銷
  }
  function login() {
    return view('admin.users.login');
  }
  function getlogout() {
  if(Auth::check()){
      Auth::logout();  //退出登錄
  }
      return redirect('/auth/login');
  }
  function auth(Request $request) {
    $user=$request->only(['name','password']);
    if(Auth::attempt($user,$request->remember)){ //驗證密碼 通過後合一用Auth::user() 獲取登錄用戶信息 也可以使用 Auth::loginUsingId($user->id) 來登錄
        return redirect()->intended('/admin');
    }else{
      return redirect('/auth/login')->withErrors(['login failed'])->withInput($request->except('password'));
    }
  }
  public function redirectPath()  //重構未登錄時的跳轉地址
  {
    return '/admin';
  }
}

4、修改文件不同文件 redirectPath

guest中間件:app/Http/Middleware/RedirectIfAuthenticated.php

public function handle($request, Closure $next)
  {
  if ($this->auth->check()) {
                return redirect('/admin');  //修改登錄頁面默認登陸後的跳轉地址
  }
  return $next($request);
  }

auth中間件:app/Http/Middleware/Authenticate.php

public function handle($request, Closure $next)
    {
        if ($this->auth->guest()) {
            if ($request->ajax()) {
                return response('Unauthorized.', 401);
            } else {
                return redirect()->guest('auth/login');
            }
        }
        return $next($request);
    }

5、添加路由

Route::group(['namespace' => 'Auth','prefix'=>'auth'],function(){ 
    route::get('/login','AuthController@login'); 
    route::get('/logout','AuthController@getlogout'); 
    route::post('/login','AuthController@auth'); 
});
route::get('/admin',['namespace' => 'Admin','middleware' => 'auth'],'AdminController@index');


參考教程:http://laravelacademy.org/tutorials/blog

GitHub:https://github.com/CiaraLi/blogtest



發佈了26 篇原創文章 · 獲贊 23 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章