我正在为我的应用编写API登录注册系统。
我已经创建了一个用于登录和注册的控制器,所以我可以从邮局创建我的用户并从那里登录但是当我尝试调用my get details
方法时它正在返回
作为一种不允许异常的方法
这是我的控制器
<?php
namespace App\Http\Controllers\API;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Support\Facades\Auth;
use Validator;
class PassportController extends Controller
{
//
public $successStatus = 200;
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);
}
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);
}
}
public function getDetails()
{
$user = Auth::user();
return response()->json(['success' => $user], $this->successStatus);
}
}
api.php
<?php
use Illuminate\Http\Request;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
Route::post('register', 'API\PassportController@register')->name('register');
Route::post('login', 'API\PassportController@login')->name('login');
Route::group(['middleware' => 'auth:api'], function(){
Route::post('details', 'API\PassportController@getDetails');
});
这是我的邮差截图
您可以与我分享您的想法或想法
答案 0 :(得分:2)
请在app中添加您的功能网址&gt; http-&gt; Middleware-&gt;在$ except.calCsrfToken。
laravel需要csrf。如果从外部传递数据,它将不会传递csrf,所以那时你必须为这个函数定义不需要csrf。
答案 1 :(得分:2)
您是否使用带有laravel的护照?如果是,可能会有多个问题导致此问题。
我希望看到你点击应用程序框架时得到的结果,但这里有一些我发现自己处理的常见问题
我所知道的一般问题(无论技术如何)
方法不公开
使用授权时,它必须如下所示:标题选项卡
键:授权 价值:持票人eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiI
这个乱码是您的访问令牌,没有任何逗号
检查服务器和laravel日志。有时邮递员会搞砸并发送获取而不是发布请求,反之亦然
如果您收到未经身份验证的错误
4.1在此处按照以下步骤操作:https://laravel.com/docs/5.6/passport
4.2从db /命令行复制客户端密钥
4.3在图片中使用此端点 {{url_key}} id我网站的地址ex:demo.dev或htttp:// localhost。我不确定使用locahost(我只对流浪者开发了laravel所以我不知道可能会出现什么问题) 在这种情况下,标题应为空
4.4使用令牌进行身份验证
class VerifyCsrfToken extends BaseVerifier { /** * The URIs that should be excluded from CSRF verification. * * @var array */ protected $except = [ 'api/*' ]; }
答案 2 :(得分:2)
当您的路线为getDetails()
post
Route::post('details', 'API\PassportController@getDetails');
尝试将getDetails()
更改为postDetails()
并将路线更改为
Route::post('details', 'API\PassportController@postDetails');