php - Laravel 7更改登录凭据的名称
问题描述
我有一个全新安装的 Laravel 7,没有composer require laravel / ui
. 我的目标是将默认登录名更改为username/email
和password
。
控制器AuthController.php
:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Validator,Redirect,Response;
Use App\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Session;
class AuthController extends Controller
{
public function index()
{
return view('login');
}
public function registration()
{
return view('registration');
}
public function getAuthPassword()
{
return 'sms_code';
}
public function postLogin(Request $request)
{
request()->validate([
'id_message' => 'required',
'sms_code' => 'required',
]);
$credentials = $request->only('id_message', 'sms_code');
if (Auth::attempt($credentials)) {
return redirect()->intended('dashboard');
}
return Redirect::to("login");
}
public function postRegistration(Request $request)
{
request()->validate([
'id_message' => 'required',
'sms_code' => 'required|min:6',
'url_attribute' => 'required|min:6',
'mail_from' => 'required',
'mail_to' => 'required',
]);
$data = $request->all();
$check = $this->create($data);
return Redirect::to("dashboard");
}
public function dashboard()
{
if(Auth::check())
{
return view('dashboard');
}
return Redirect::to("login");
}
public function create(array $data)
{
return User::create([
'id_message' => $data['id_message'],
'sms_code' => Hash::make($data['sms_code']),
'url_attribute' => $data['url_attribute'],
'mail_from' => $data['mail_from'],
'mail_to' => $data['mail_to'],
]);
}
public function logout()
{
Session::flush();
Auth::logout();
return Redirect('login');
}
}
方法App\Http\User.php
<?php
namespace App;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable
{
use Notifiable;
protected $fillable = [
'mail_from',
'mail_to',
'url_attribute',
'sms_code',
'id_message',
];
protected $hidden = [
'sms_code', 'remember_token',
];
protected $casts = [
];
}
当我尝试用数据库中的数据填写登录表单时 - >用户名id_message
和密码sms_code
返回此错误:
ErrorException
Undefined index: password
Illuminate\Foundation\Bootstrap\HandleExceptions::handleError
vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php:156
EloquentUserProvider.php-> 第 156 行
public function validateCredentials(UserContract $user, array $credentials)
{
$plain = $credentials['password'];
return $this->hasher->check($plain, $user->getAuthPassword());
}
我错过了什么吗?
解决方案
您可以通过这种方式使用简单登录:
public function postLogin(Request $request)
{
request()->validate([
'id_message' => 'required',
'sms_code' => 'required',
]);
$credentials = $request->only('id_message', 'sms_code');
if ($user=User::where($credentials)->first()) {
auth()->login($user)
return redirect()->intended('dashboard');
}
return Redirect::to("login");
}
推荐阅读
- django - 如何在 RestFramework 中显示多对多字段
- jpa - 未注入 Web 服务的持久性单元
- python-3.x - 如何修复 python 中的“from caffe.proto import caffe_pb2”错误?
- crystal-reports - 在报告中添加徽标时,水晶报告在徽标中添加灰色背景色
- ffmpeg - ffmpeg 在将图像转换为视频时改变配色方案
- python - 如何增加决策树中列的重要性?
- jquery - 每次我在边缘单击它时,checkbox checked 属性都设置为 true
- python - Selenium 服务器无法创建与 HTMLUnit 的会话
- xaml - 会话状态服务失败 - UWP
- azure - Spotfire 与 Blob 的连接(存储帐户)