温馨提示:本文翻译自stackoverflow.com,查看原文请点击:laravel - My login form only reloads the page but doesn't log the user in
laravel

laravel - 我的登录表单仅重新加载页面,而不登录用户

发布于 2020-03-27 15:45:06

我从表单中取出“电子邮件”和“名称”,从User.php中受保护的可填充内容中取出“电子邮件”和“名称”后,登录表单损坏了。我还使冗余字段在数据库中可为空。用户应该能够使用其“用户名”和“密码”登录。注册表格工作正常,只是导致问题的登录表格。

login.blade.php @extends('layouts.app')

@section('content')
<div class="container">
<div class="row justify-content-center">
    <div class="col-md-8">
        <div class="card">
            <div class="card-header">{{ __('Login') }}</div>

            <div class="card-body">
                <form method="POST" action="{{ route('login') }}">
                    @csrf

                    <div class="form-group row">
                        <label for="username" class="col-md-4 col-form-label text-md-right">{{ __('Username') }}</label>

                        <div class="col-md-6">
                            <input id="username" type="username" class="form-control @error('username') is-invalid @enderror" name="username" value="{{ old('username') }}" required autocomplete="username" autofocus>

                            @error('username')
                                <span class="invalid-feedback" role="alert">
                                    <strong>{{ $message }}</strong>
                                </span>
                            @enderror
                        </div>
                    </div>

                    <div class="form-group row">
                        <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>

                        <div class="col-md-6">
                            <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password">

                            @error('password')
                                <span class="invalid-feedback" role="alert">
                                    <strong>{{ $message }}</strong>
                                </span>
                            @enderror
                        </div>
                    </div>

                    <div class="form-group row">
                        <div class="col-md-6 offset-md-4">
                            <div class="form-check">
                                <input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>

                                <label class="form-check-label" for="remember">
                                    {{ __('Remember Me') }}
                                </label>
                            </div>
                        </div>
                    </div>

                    <div class="form-group row mb-0">
                        <div class="col-md-8 offset-md-4">
                            <button type="submit" class="btn btn-primary">
                                {{ __('Login') }}
                            </button>

                            @if (Route::has('password.request'))
                                <a class="btn btn-link" href="{{ route('password.request') }}">
                                    {{ __('Forgot Your Password?') }}
                                </a>
                            @endif
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </div>
</div>
</div>
@endsection

模型User.php

namespace App;



use App\Mail\NewUserWelcomeMail;

use Illuminate\Notifications\Notifiable;

use Illuminate\Contracts\Auth\MustVerifyEmail;

use Illuminate\Foundation\Auth\User as Authenticatable;

use Illuminate\Support\Facades\Mail;



class User extends Authenticatable

{

use Notifiable;


protected $fillable = [

    'username', 'password',

];





protected $hidden = [

    'password', 'remember_token',

];

protected $casts = [

    'email_verified_at' => 'datetime',

];



protected static function boot()

{

    parent::boot();



    static::created(function ($user) {

        $user->profile()->create([

            'title' => $user->username,

        ]);




    });

}



public function posts()

{

    return $this->hasMany(Post::class)->orderBy('created_at', 'DESC');

}



public function following()

{

    return $this->belongsToMany(Profile::class);

}



public function profile()

{

    return $this->hasOne(Profile::class);

}





public function tasks()
{
    return $this->hasMany(Task::class);
}

}

数据库表

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateUsersTable extends Migration
{
/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('name')->nullable();
        $table->string('email')->nullable();
        $table->string('username')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });
    }


public function down()
{
    Schema::dropIfExists('users');
}
}

LoginController.php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
{


use AuthenticatesUsers;


protected $redirectTo = RouteServiceProvider::HOME;


public function __construct()
{
    $this->middleware('guest')->except('logout');
}
}

查看更多

查看更多

提问者
jsmith
被浏览
90
hasan05 2020-01-31 17:28

将此功能添加到App\Http\Controller\Auth\LoginController.php

它将您的登录字段更改emailusername现在可以解决您的问题。

public function username()
{
    return 'username';
}

一个建议给你。看一下“如何使用框架的身份验证”。