首页 > 解决方案 > Laravel 7更改登录凭据的名称

问题描述

我有一个全新安装的 Laravel 7,没有composer require laravel / ui. 我的目标是将默认登录名更改为username/emailpassword

控制器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());
}

我错过了什么吗?

标签: phplaravel

解决方案


您可以通过这种方式使用简单登录:

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");
}

推荐阅读