【问题标题】:Laravel Default Auth with ModalsLaravel 默认身份验证与模态
【发布时间】:2017-02-17 19:05:24
【问题描述】:

我正在尝试通过使用模态窗口和添加一些新字段来修改 laravel 的默认身份验证系统。 所以,我有一个模式窗口来注册一个新用户,如下所示:

<!-- Modal Register area -->
<div class="modal fade" id="registerModal" tabindex="-1" role="dialog" aria-labelledby="myRegisterLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <form id="formRegister" class="login-form" action="{{ route('register') }}" method="POST">

        {{ csrf_field() }}

        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal" aria-label="Close">
            <span aria-hidden="true">&times;</span>
          </button>
          <h4 class="modal-title" id="myRegisterLabel">Sign Up</h4>
        </div>
        <div class="modal-body">
          <div class="form-group">
            <label>First Name:</label>
            <input type="text" name="first_name" placeholder="first name..." value="{{ old('first_name') }}" required autofocus>
          </div>
          <div class="form-group">
            <label>Last Name:</label>
            <input type="text" name="last_name" placeholder="last name..." value="{{ old('last_name') }}" required autofocus>
          </div>
          <div class="form-group">
            <label>Email:</label>
            <input type="email" name="email" placeholder="email..." value="{{ old('email') }}" required>
          </div>
          <div class="form-group">
            <label>Password:</label>
            <input type="password" name="password" required>
          </div>
          <div class="form-group">
            <label>Password Confirmation:</label>
            <input type="password" name="password_confirmation" required>
          </div>
          <div class="form-group">
            <button type="submit" class="btn btn-primary">
                Register
            </button>
          </div>
        </div>
      </form>
      @if(count($errors))
        @foreach ($errors->all() as $error)
          <div class="alert alert-danger">
            <p>{{ $error }}</p>
          </div>
        @endforeach
      @endif
    </div>
  </div>
</div>
<!-- End Modal Register area -->

然后我修改了 RegisterController 验证规则和 create 方法以包含这个新字段以及迁移文件。 (所以,我在数据库中有文件,那里一切都很好)

注册控制器:

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Http\Request;

class RegisterController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Register Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users as well as their
    | validation and creation. By default this controller uses a trait to
    | provide this functionality without requiring any additional code.
    |
    */

    use RegistersUsers;

    /**
     * Where to redirect users after registration.
     *
     * @var string
     */
    protected $redirectTo = '/';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'first_name' => 'required|max:255',
            'last_name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|min:6|confirmed',
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return User
     */
    protected function create(array $data)
    {
        return User::create([
            'first_name' => $data['first_name'],
            'last_name' => $data['last_name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);
    }
}

在您可以看到的表单中,我将其发布到 route('register') 但即使我在提交表单时没有收到任何错误并且我被重定向到 / 用户没有得到保存在数据库中.. 问题是,我不确定这个默认的身份验证系统是如何工作的..

感谢您的帮助!

【问题讨论】:

  • 您是否将该字段添加到模型上的 $fillable 属性中?
  • 是的,我做了,我忘了提。
  • 那么在您的制作和创建中,您要添加的新字段在哪里?
  • 可能也值得展示你的模型

标签: php laravel laravel-5.3 laravel-5.4


【解决方案1】:

我认为提供的代码非常正确。确保您在迁移中删除了name 字段表单users 表。

使用您的代码,我能够使用您的模式和控制器注册用户。是新鲜的 Laravel 5.4,你的模态被放置在welcome.blade.php。还添加了 css/js 文件和一个显示模式的按钮。

这是我的 up() 迁移更新 users

public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('name');
            $table->string('first_name')->nullable();
            $table->string('last_name')->nullable();
        });
    }

还使用新的填充物更新了 User 模型:

protected $fillable = [
    'email', 'password', 'first_name', 'last_name'
];

【讨论】:

  • Hmm.. 我所做的是在运行 make:auth 进行默认身份验证后,我直接进入用户迁移并删除了“名称”字段,然后添加了我的名字和姓氏.之后,我运行了 php artisan migrate。这应该是问题吗?
  • 是的,如果之前没有运行过,您可以修改现有迁移。所以这应该不是问题
  • 好的,我终于能够运行它了,我现在感觉很傻哈哈..问题出在我的模式上,我忘了我在密码上输入了 min:6 的验证,我是输入 4 个字符的密码。因为提交后模式关闭,我没有注意到。谢谢大家!
  • @OvidiuG 祝你有美好的一天!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-11
  • 1970-01-01
  • 2018-01-19
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 2017-01-22
相关资源
最近更新 更多