2015-10-16 5 views
0

Я получил NotFoundHttpException при доступе к POST:http://localhost:8000/auth/register. Эта ошибка появляется при обновлении проверки подлинности AuthController и создании методов. С умолчанию AuthController нет никакой ошибки, но не Данные хранятся в базе данныхNotFoundHttpException при обновлении AuthController

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]'); 

модель пользователя

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

Вы получили доступ к '/ auth/register /' через форму или что? –

ответ

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

Как мы можем видеть, после регистрации, метод перенаправления на пути redirction возвращенного redirectPath, давайте посмотрим на его исходный код:

/** 
* 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' не указан, метод по умолчанию перенаправляет на «/ дома», так что у вас есть два возможных решения:

  1. определяют маршрут для /home и получить покончим с этим быстро
  2. указать атрибут 'redirectTo' или redirectPath в AuthController следующим образом:

в 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

Я вижу, интересно. Мне, возможно, придется немного почитать об этом. –

Смежные вопросы