Laravel 登录
2018-11-01 本文已影响0人
AnnaJIAN
写一个简单的登录例子
使用Laravel默认的登录模块
php artisan make:auth
php artisan migrate
运行结果
routes/web.php 将增加代码
Auth::routes();
将增加controller文件
Project-root/app/Http/Controllers/Auth
18:21:39@Localhost🤓 ls
ForgotPasswordController.php ResetPasswordController.php
LoginController.php VerificationController.php
RegisterController.php
将增加显示文件
Project-root/resources/views/auth
18:22:59@Localhost🤓 ls
login.blade.php register.blade.php
passwords verify.blade.php
外部调用, 比如页面头部折叠登录调用
<div class="collapse navbar-collapse" id="app-navbar-collapse">
<ul class="nav navbar-nav"></ul>
<ul class="nav navbar-nav navbar-right">
@guest
<li><a href=" {{ route('login') }} ">登录</a></li>
<li><a href=" {{ route('register') }} ">注册</a></li>
@else
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
<span class="user-avatar pull-left" style="margin-right:8px;margin-top:-5px;">
<img src="image-url" class="img-responsive img-circle" width="30px" height="30px">
</span>
{{ Auth::user()->name }} <span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li>
<a href="{{ route('logout') }}"
onclick="event.preventDefault();
document.getElementById('logout-form').submit();
">
退出登录
</a>
<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
{{ csrf_field() }}
</form>
</li>
</ul>
</li>
@endguest
</ul>
</div>
route('logout') 调用路径
web.php
Auth::routes();
Facades/Auth.php
public static function routes(array $options = [])
{
static::$app->make('router')->auth($options);
}
vender...Routing/Router.php
public function auth(array $options = [])
{
// Authentication Routes...
$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
$this->post('login', 'Auth\LoginController@login');
$this->post('logout', 'Auth\LoginController@logout')->name('logout');
...
Auth/LoginController.php
use AuthenticatesUsers;
vendor...Auth/AuthenticatesUsers.php
trait AuthenticatesUsers
{
...
public function logout(Request $request)
{
$this->guard()->logout();
$request->session()->invalidate();
return $this->loggedOut($request) ?: redirect('/');
}
后面就自己跟了。。。
手写实现一个登录功能
routes/web.php
Route::get('/login', ['as' => 'login', 'uses' => 'SessionsController@create']);
Route::post('/login', ['as' => 'login', 'uses' => 'SessionsController@store']);
Route::get('/logout', 'SessionsController@destory');
Route::get('/register', 'RegistrationController@create');
Route::post('/register', 'RegistrationController@store');
SessionController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class SessionsController extends Controller
{
public function __construct()
{
// Only guest will do the following progress.
$this->middleware('guest', ['except' => 'destory']);
}
public function create()
{
return view('sessions.create');
}
public function store()
{
if (!auth()->attempt(request(['name', 'password']))) {
return back()->withErrors([
'message' => "Please check your credientials and try again."
]);
}
return redirect()->home();
}
public function destory()
{
auth()->logout();
return redirect('/');
}
}
RegistrationController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
class RegistrationController extends Controller
{
public function create()
{
return view('registration.create');
}
public function store()
{
request()->validate([
'username' => 'required',
'email' => 'required|email',
'password' => 'required|confirmed'
]);
$user = User::create([
'name' => request('username'),
'email' => request('email'),
'password' => bcrypt(request('password'))
]);
// \Auth->login();
auth()->login($user);
return redirect()->home();
}
}
views/sessions/create.blade.php
@extends ('layout')
@section ('content')
<div class="col-sm-6 blog-main">
<h1>Login</h1>
<hr>
<form action="/login" method="POST">
{{ csrf_field() }}
<div class="form-group">
<label for="name"> Name : </label>
<input type="text" name="name" class="form-control">
</div>
<div class="form-group">
<label for="password"> Password : </label>
<input type="password" name="password" class="form-control">
</div>
<div class="form-group">
<button class="btn btn-primary" type="submit" name="login"> Login </button>
<a href="\register">Register</a>
</div>
@include('layouts.errors')
</form>
</div>
@endsection
其它的blade就不写了。
需要说明的是,以下代码调用的是同一个方法
auth()->logout();
\Auth->logout();
{{ route('logout') }}
原始bootstrap做完界面效果差不多这样


Laravel 多用户表登录参考
https://laravel-china.org/topics/2777/laravel-53-multi-user-login