Laravel Auth问题

时间:2016-12-06 15:06:51

标签: php twitter-bootstrap laravel laravel-5

我刚开始学习Laravel,我正在尝试建立一个身份验证系统。我可以使用auth中内置的laravel,但我按照教程来理解这个概念。 我的auth系统是使用bootstrap的一些模态构建的,系统工作(种类)。 注册有效,但只要我输入逻辑符号,注册就会以某种方式崩溃(没有错误)并且不会将我的用户保存在数据库中。

以下是我正在使用的内容:

这是注册的模式窗口。登录几乎相同,我只是将操作更改为指向postSignin方法。

<!-- 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::open(['method' => 'POST', 'action' => 'UserController@postSignup', 'class' => 'login-form']) !!}
      <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>Email:</label>
          {!! Form::text('email', Request::old('email'),['placeholder' => 'Email...']) !!}
        </div>
        <div class="form-group">
          <label>Password:</label>
          {!! Form::password('password', Request::old('password'),['placeholder' => 'Password...']) !!}
        </div>
        <div class="row">
          <div class="col-sm-12">
            <input type="submit" class="btn btn-primary login-btn" value="Sign Up">
          </div>
        </div>
      </div>
      {!! Form::close() !!}
      @if($errors->any())
        @foreach ($errors->all() as $error)
          <div class="alert alert-danger">
            <p>{{ $error }}</p>
          </div>
        @endforeach
      @endif
    </div>
  </div>
</div>
<!-- End Modal Register area -->

这就是我设置控制器的方式:

<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use Auth;

class UserController extends Controller
{
    public function postSignup(Request $request){
      $this->validate($request, [
        'email' => 'email|required|unique:users',
        'password' => 'required|min:4'
      ]);

      $user = new User([
        'email' => $request->input('email'),
        'password' => bcrypt($request->input('password'))
      ]);
      $user->save();

      return redirect('/');
    }

    public function postSignin(Request $request){
      $this->validate($request, [
        'email' => 'email|required',
        'password' => 'required|min:4'
      ]);

      if (Auth::attempt([
        'email' => $request->input('email'),
        'password' => $request->input('password')
      ])){
        return redirect()->route('user.profile');
      }
      return redirect()->back();
    }

    public function getProfile(){
      return view('user.profile');
    }
}

对于我使用过的路线:

Route::post('/','UserController@postSignup');

Route::post('/','UserController@postSignin');

所以,正如我所说的,一旦我设置登录注册就不会将我的用户注册到数据库中。如果我拿出来,它的确有效.. 如果我有一些用户进入数据库,则登录可以正常工作。 谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

好的,对于有人想知道这里的问题是什么。这是因为我的路线。两者都指向'/',它以某种方式导致了这个问题。

答案 1 :(得分:0)

问题是你的两条路线都匹配。 Laravel中的路由工作方式是,它将按顺序检查您的路由,直到找到匹配的路由。在这种情况下,两种情况都匹配第一条路由,因为URL和HTTP谓词是相同的。

我遇到的一个类似的常见问题是当你有一个带变量的路线时。

Route::get('posts/{post}', 'PostController@show')
Route::get('posts/popular', 'PostController@popular')

在这个示例中,您会遇到类似的问题,因为它首先匹配第一条路线,并且不会继续前进到第二条路线。