更新 AuthController 时出现 NotFoundHttpException
Posted
技术标签:
【中文标题】更新 AuthController 时出现 NotFoundHttpException【英文标题】:NotFoundHttpException when updating AuthController 【发布时间】:2016-01-15 01:12:36 【问题描述】:访问POST:http://localhost:8000/auth/register
时,我得到了NotFoundHttpException
。当我更新 AuthController 验证器并创建方法时会出现此错误。使用默认 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\AuthController@postRegister');
用户模型
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>
【问题讨论】:
你能把php artisan route:list
命令的输出贴出来
@HamzaOuaghad pastebin.com/Xq24AQLK
您是通过表单还是通过什么方式访问/auth/register/
?
@HamzaOuaghad 不通过休息客户端,它是一个 API
好的,当你得到这个错误时,上面的链接,是/auth/register/
还是别的什么?根据跟踪,您实际上从未去过auth/controller
,因此您的routes.php 很可能有问题。或者,就像我的问题一样,我怀疑你是否真的成功地执行了postRegister
并被重定向到默认的重定向路径,但你没有在你的 routes.php 中指定它,所以你得到了这个错误。试试这个,所以我们可以找到:在您的routes.php
中为/home
指定一条路线,该路线只是回声打招呼。
【参考方案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
返回的重定向路径,我们也看看它的源码:
/**
* 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',所以你有两种可能的解决方案:
-
为
/home
指定路线并快速完成
在AuthController
中指定'redirectTo'
或redirectPath
属性,如下所示:
在AuthController.php
class AuthController extends Controller
use AuthenticatesAndRegistersUsers, ThrottlesLogins;
protected $redirectPath = '/myspecifiedroute';
...
...
【讨论】:
关于unique:users
,到目前为止我没有处理任何有用的信息。也许我会建议检查您的数据库驱动程序版本。【参考方案2】:
我的 AuthController 中有一个 $redirectTo
属性,成功登录后会覆盖默认重定向:
class AuthController extends Controller
use AuthenticatesAndRegistersUsers, ThrottlesLogins;
public $redirectTo = '/';
protected $loginPath = '/account/login';
...
我不确定它是 $redirectTo 还是 $redirectPath(至少根据文档,我在我的项目中找不到这个)
Further Reading
【讨论】:
公共 $redirectTo = '';就我而言,它是一个 API【参考方案3】:@hamza-ouaghad 答案是我的问题的正确答案。但我遇到了另一个问题:我的数据没有存储在我的数据库中。当使用laravel-mongodb 并且您需要在数据模型中使用唯一字段(如电子邮件)时,您必须创建如下迁移:
Schema::create('users_collection', function($collection)
$collection->unique('email');
);
【讨论】:
以上是关于更新 AuthController 时出现 NotFoundHttpException的主要内容,如果未能解决你的问题,请参考以下文章
linux 使用yum命令安装软件时出现HTTP Error 404 NOT FOUND错误的解决办法
使用串行插件时出现 Ionic Capacitor Android 错误 - 连接到外部设备时出现 Cordova_not_available
Python安装Pillow时出现The headers or library files could not be found for zlib/jpeg错误