php - Laravel 5.7 验证::检查
问题描述
我正在为两个用户(管理员和客户)开发登录系统。对于管理员,我使用了默认的身份验证文件,但为客户创建了新文件。我的问题是auth::check
管理员的工作,但它不为客户。所以它不会查询数据库并登录任何电子邮件和任何密码。我怎样才能解决这个问题?
客户登录.php
@extends('layouts.app')
@section('title','CustomerLogin')
@push('css')
@endpush
@section('content')
<div class="content">
<div class="container-fluid">
<div class="row">
<div class="col-md-8 col-md-offset-1">
@include('layouts.partial.msg')
<div class="card">
<div class="card-header" data-background-color="purple">
<h4 class="title">Customer Login</h4>
</div>
<div class="card-content">
<form method="POST" action="{{ route('customerLogin') }}">
@csrf
<div class="row">
<div class="col-md-12">
<div class="form-group label-floating">
<label class="control-label">Email</label>
<input type="email" class="form-control" name="email" value="{{ old('email') }}" required>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group label-floating">
<label class="control-label">Password</label>
<input type="password" class="form-control" name="password" required>
</div>
</div>
</div>
<button type="submit" class="btn btn-primary">Login</button>
<a href="{{ route('homepage') }}" class="btn btn-danger">Back</a>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
@endpush
客户日志控制器
<?php
namespace App\Http\Controllers;
use App\Category;
use App\Item;
use App\Slider;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AutenticatesUser;
use Illuminate\Support\Facades\Hash;
use Auth;
use Redirect;
use Session;
use Validator;
use Illuminate\Support\Facades\Input;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class CustomerLogController extends Controller
{
use AutenticatesUser;
/**
* Where to redirect users after login.
*
* @var string
*/
protected function authenticated() {
if($customers = Auth::customers()){
return redirect()->route('homepage');
}
}
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
/**
* Create a new controller instance.
*
* @return void
*/
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$sliders = Slider::all();
$categories = Category::all();
$items = Item::all();
return view('homepage',compact('sliders','categories','items'));
}
public function logout(Request $request) {
$this->guard()->logout();
$request->session()->invalidate();
return redirect('/');
}
}
网页.php
<?php
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::redirect('lara-admin','login');
Route::get('/','HomeController@index')->name('welcome');
Route::get ('/homepage', 'HomepageController@index')->name('homepage');
Route::post('/reservation','ReservationController@reserve')->name('reservation.reserve');
Route::post('/contact','ContactController@sendMessage')->name('contact.send');
Auth::routes();
Route::resource ('customerLogin', 'CustomerLoginController');
Route::post('homepage', 'CustomerLogController@index')->name('customerLogin');
Route::get('/logout', 'CustomerLogController@logout');
Route::group(['prefix'=>'admin','middleware'=>'auth','namespace'=>'Admin'], function (){
Route::get('dashboard', 'DashboardController@index')->name('admin.dashboard');
Route::resource('slider','SliderController');
Route::resource('category','CategoryController');
Route::resource('item','ItemController');
Route::get('reservation','ReservationController@index')->name('reservation.index');
Route::post('reservation/{id}','ReservationController@status')->name('reservation.status');
Route::delete('reservation/{id}','ReservationController@destory')->name('reservation.destory');
Route::get('contact','ContactController@index')->name('contact.index');
Route::get('contact/{id}','ContactController@show')->name('contact.show');
Route::delete('contact/{id}','ContactController@destroy')->name('contact.destroy');
});
任何帮助将非常感激!
解决方案
在旧版本的 Laravel 中,当我们创建新的 auth 文件时,我们遇到了与您相同的问题 - 这Auth::Check()
不起作用。完全没有。无法弄清楚为什么。
我们最终通过使用手动检查登录,确保它是正确的,Hash::check()
然后使用Auth::LoginUsingId()
.
if(Hash::check($password, $user->u_pass)){
Auth::LoginUsingId($user->id);
return redirect()->intended('/');
}
此时,所有Auth::
功能都按预期工作。
这是一个 hacky 解决方案,但它确实有效。
推荐阅读
- wordpress - WordPress帖子未显示内部图像
- javascript - 如何通过单击按钮甚至传单中的标记来制作使我的菜单打开的按钮
- oracle - 仅使用 sqlplus 上传二进制(BLOB)内容的最有效方法是什么
- excel - 如何一次删除一个动态添加的用户窗体控件?
- python - split() 没有产生预期的结果
- php - 雄辩的传递论点不被雄辩的
- azure-cosmosdb - 如何使用 .net Sdk 版本 3 使用自定义序列化调用 CosmosDb 上的存储过程?
- postgresql - 如何在 pg_hba.conf 上放置多个 ip
- ios - 如何使情节提要中的 UILabel 和 UIButton 大写
- apache-zookeeper - Zookeeper 发布文件 - 有什么区别