邮递员不允许例外的方法

时间:2018-03-22 11:04:17

标签: laravel laravel-5 laravel-5.2 laravel-5.3 laravel-5.4

我正在为我的应用编写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');
});

这是我的邮差截图

enter image description here

您可以与我分享您的想法或想法

3 个答案:

答案 0 :(得分:2)

请在app中添加您的功能网址&gt; http-&gt; Middleware-&gt;在$ except.calCsrfToken。

laravel需要csrf。如果从外部传递数据,它将不会传递csrf,所以那时你必须为这个函数定义不需要csrf。

答案 1 :(得分:2)

您是否使用带有laravel的护照?如果是,可能会有多个问题导致此问题。

我希望看到你点击应用程序框架时得到的结果,但这里有一些我发现自己处理的常见问题

我所知道的一般问题(无论技术如何)

  1. 方法不公开

  2. 授权和接受应该在邮递员enter image description here

  3. 的表格标题中

    使用授权时,它必须如下所示:标题选项卡

    键:授权 价值:持票人eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiI

    这个乱码是您的访问令牌,没有任何逗号

    1. 检查服务器和laravel日志。有时邮递员会搞砸并发送获取而不是发布请求,反之亦然

    2. 如果您收到未经身份验证的错误

    3. 4.1在此处按照以下步骤操作:https://laravel.com/docs/5.6/passport

      4.2从db /命令行复制客户端密钥

      4.3在图片enter image description here中使用此端点 {{url_key}} id我网站的地址ex:demo.dev或htttp:// localhost。我不确定使用locahost(我只对流浪者开发了laravel所以我不知道可能会出现什么问题) 在这种情况下,标题应为空

      4.4使用令牌进行身份验证

      1. 确保VerifyCsrfToken类看起来像这样
      2.  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');