2015-10-16 33 views
0

访问POST:http://localhost:8000/auth/register时,我得到了NotFoundHttpException。当我更新AuthController验证器并创建方法时出现此错误。在默认AuthController没有不存储在数据库更新AuthController时出现NotFoundHttpException

AuthController

namespace App\Http\Controllers\Auth; 

use App\User; 
use Validator; 
use App\Http\Controllers\Controller; 
use Illuminate\Foundation\Auth\ThrottlesLogins; 
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers; 

class AuthController extends Controller 
    use AuthenticatesAndRegistersUsers, ThrottlesLogins; 

    public function __construct() 
    { 
     $this->middleware('guest', ['except' => 'getLogout']); 
    } 
    protected function create(array $data) 
    { 
     return User::create([ 
      'lastname' => $data['lastname'], 
      'firstname' => $data['firstname'], 
      'email' => $data['email'], 
      'password' => bcrypt($data['password']), 
     ]); 
    } 

    protected function validator(array $data) 
    { 
     return Validator::make($data, [ 
      'firstname' => 'required|max:255', 
      'lastname' => 'required|max:255', 
      'email' => 'required|email|max:255|unique:users', 
      'password' => 'required|confirmed|min:8', 
     ]); 
    } 
} 

路线

Route::post('auth/register', 'Auth\[email protected]'); 

用户模式错误,但DATAS

namespace App; 

use Illuminate\Auth\Authenticatable; 
use Jenssegers\Mongodb\Model as Eloquent; 
use Illuminate\Auth\Passwords\CanResetPassword; 
use Illuminate\Foundation\Auth\Access\Authorizable; 
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; 
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract; 
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract; 

class User extends Eloquent implements AuthenticatableContract, 
           AuthorizableContract, 
           CanResetPasswordContract 
{ 
    use Authenticatable, Authorizable, CanResetPassword; 
    protected $collection = 'users_collection'; 
    protected $fillable = ['firstname', 'lastname', 'email', 'password']; 
    protected $hidden = ['password', 'remember_token']; 

    public function websites(){ 
     return $this->hasMany('App\Website'); 
    } 
} 

途径列表 http://pastebin.com/Xq24AQLK

的.htaccess

<IfModule mod_rewrite.c> 
    <IfModule mod_negotiation.c> 
     Options -MultiViews 
    </IfModule> 

    RewriteEngine On 

    # Redirect Trailing Slashes If Not A Folder... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)/$ /$1 [L,R=301] 

    # Handle Front Controller... 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule^index.php [L] 
</IfModule> 
+0

你能发布命令'PHP工匠路线的输出:list' –

+0

@ HamzaOuaghad http://pastebin.com/Xq24AQLK – Ludovic

+0

你通过表单或访问什么'/认证/注册/'? –

回答

1

正如我在评论中提及了那里,并根据您的意见提的是,用户实际上得到在数据库中注册,所以调试问题,让我们来看看postRegister方法的源代码:

/** 
* Handle a registration request for the application. 
* 
* @param \Illuminate\Http\Request $request 
* @return \Illuminate\Http\Response 
*/ 
public function postRegister(Request $request) 
{ 
    $validator = $this->validator($request->all()); 

    if ($validator->fails()) { 
     $this->throwValidationException(
      $request, $validator 
     ); 
    } 

    Auth::login($this->create($request->all())); 

    return redirect($this->redirectPath()); 
} 

正如我们所看到的,在注册后,该方法重新导向至redirectPath返回redirction路径,让我们来看看其源代码如下:

/** 
* Get the post register/login redirect path. 
* 
* @return string 
*/ 
public function redirectPath() 
{ 
    if (property_exists($this, 'redirectPath')) { 
     return $this->redirectPath; 
    } 

    return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home'; 
} 

我们可以看到,如果没有指定'redirectTo'属性,默认情况下,该方法重定向到一个“/ home”,所以你有两个可能的解决方案:

  1. 指定路线/home并获得用它做快速
  2. AuthController指定'redirectTo'redirectPath属性如下:

AuthController.php

class AuthController extends Controller 
    { 
     use AuthenticatesAndRegistersUsers, ThrottlesLogins; 
     protected $redirectPath = '/myspecifiedroute'; 
     ... 
     ... 
+0

完美,谢谢! – Ludovic

+0

关于'unique:users',我不会处理任何有用的信息。也许我会建议检查您的数据库驱动程序版本。 –

1

我有一个$redirectTo财产在我AuthController,覆盖成功登录后,默认的重定向:

class AuthController extends Controller { 

    use AuthenticatesAndRegistersUsers, ThrottlesLogins; 

    public $redirectTo = '/'; 
    protected $loginPath = '/account/login'; 
    ... 

我不确定它是否是$ redirectTo或$ redirectPath(至少acc奥尔丁的文档,我无法找到这一个在我的项目)

Further Reading

+0

public $ redirectTo ='';在我的情况下,这是一个API – Ludovic

0

@ hamza-ouaghad答案是我的问题的正确答案。但是我又遇到了另一个问题:我的数据库没有存储在我的数据库中。当使用laravel-mongodb,你需要在你的数据模型的唯一字段(如电子邮件),你有一个像创建一个迁移:

Schema::create('users_collection', function($collection) { 
    $collection->unique('email'); 
}); 
+0

我明白了,有趣。 我可能需要阅读一些内容。 –

相关问题