我遇到了邮递员无法获得令牌的问题以及以下问题
ReflectionException …\ vendor \ laravel \ framework \ src \ Illuminate \ Container \ Container.php790 用户控制器不存在
我的路线文件;
Route::post('login', 'API\UserController@login');
Route::post('register', 'API\UserController@register');
Route::group(['middleware' => 'auth:api'], function(){
Route::post('details', 'API\UserController@details');
});
我的控制器文件;
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Support\Facades\Auth;
use Validator;
use Illuminate\Http\Request;
class UserController extends Controller {
//
public $successStatus = 200;
/**
* login api
*
* @return \Illuminate\Http\Response
*/
public function login(){
if(Auth::attempt(['email' => request('email'), 'password' => request('password')])){
$user = Auth::user();
$success['token'] = $user->createToken('MyApp')-> accessToken;
return response()->json(['success' => $success], $this-> successStatus);
}
else{
return response()->json(['error'=>'Unauthorised'], 401);
}
}
/**
* Register api
*
* @return \Illuminate\Http\Response
*/
public function register(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required',
'email' => 'required|email',
'password' => 'required',
'c_password' => 'required|same:password',
]); if ($validator->fails()) {
return response()->json(['error'=>$validator->errors()], 401);
} $input = $request->all();
$input['password'] = bcrypt($input['password']);
$user = User::create($input);
$success['token'] = $user->createToken('MyApp')-> accessToken;
$success['name'] = $user->name; return response()->json(['success'=>$success], $this-> successStatus);
}
/**
* details api
*
* @return \Illuminate\Http\Response
*/
public function details()
{
$user = Auth::user();
return response()->json(['success' => $user], $this-> successStatus);
}
}
我该如何解决?
答案 0 :(得分:1)
这可能是因为您没有在指向该控制器的用户路由上调用正确的中间件。您将必须创建用户中间件。
您可以通过导航到App \ Http \ Middleware并添加名称为UserMiddleware.php的用户中间件和一些代码来做到这一点。
首先,您需要导入以下文件;
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
然后您创建一个名为的类。 class UserMiddleware
像这样向其添加一个句柄函数; public function handle($request, Closure $next)
在此函数内包含以下代码;
if (Auth::user()->usertype == 'user')
{
return $next($request);
}
接下来,转到您的App \ Http \ Kernel.php,并在 受保护的$ routeMiddleware 部分的底部添加以下代码;
'user' => \App\Http\Middleware\UserMiddleware::class,
然后转到您的路由(API),并将此预定义的用户中间件包括在您的URL中。
Route::group(['middleware' => 'user'], function () {
Route::post('login', 'API\UserController@login');
Route::post('register', 'API\UserController@register');
Route::post('details', 'API\UserController@details');
});
});
要执行此操作,您需要在用户表中有一个usertype
字段,默认情况下将其设置为user
。您的用户类型列应如下所示:
$table->string('usertype')->nullable()->default('user');
答案 1 :(得分:0)
如果您的控制器路径为/App/Http/Controllers/API
,则需要调整其命名空间:
namespace App\Http\Controllers\API;
如果您的控制器路径为/App/Http/Controllers
,则需要调整路线:
Route::post('login', 'UserController@login');
答案 2 :(得分:0)
只需在名称空间中写文件夹扩展名
例如您的情况
namespace App\Http\Controllers\API;
在路线中,您只需编写
Route::post('register','api\UserController@register');
答案 3 :(得分:0)
1 。复制并删除控制器的现有功能。
2 。重新创建控制器,但是这次在Controllers目录中指定要放置控制器的位置。例如
php artisan make:controller NameOfYourSubFolder \ YourControllersName
3 。粘贴功能。