【问题标题】:laravel 5.6 passport .Postman loading no outputlaravel 5.6 护照。邮递员加载没有输出
【发布时间】:2019-07-02 04:33:02
【问题描述】:

我正在尝试构建一个身份验证端点,当用户使用Laravel 5.6 进行身份验证时返回用户的密钥。

在使用localhost:8000Postman 进行测试时,我发现它接受了请求,但没有输出任何内容。 please click here to see the image.

看看下面的AuthController

    <?php

    namespace App\Http\Controllers\Api;

    use App\User;
    use Illuminate\Http\Request;
    use App\Http\Controllers\Controller;
    use GuzzleHttp\Exception\GuzzleException;
    use GuzzleHttp\Client;
    use Hash;

    class AuthController extends Controller
    {
    public function register(Request $request)
    {

        $request->validate([
            'email' => 'required',
            'name' => 'required',
            'password' => 'required'
        ]);

        $user = User::firstOrNew(['email' => $request->email]);

        $user->name = $request->name;
        $user->email = $request->email;
        $user->password = bcrypt($request->password);
        $user->save();

        $http = new Client;

        $response = $http->post(url('oauth/token'), [
            'form_params' => [
                'grant_type' => 'password',
                'client_id' => '2',
                'client_secret' =>'5G7yDJFNDsqzVNSJU85ff8DWW6EiKFLGXDDmMmt9',
                'username' => $request->email,
                'password' => $request->password,
                'scope' => '',
            ],
        ]);

    return response(['data'=>json_decode((string)$response->getBody(),true)]);

    }
    public function login(Request $request)
    {

        $request->validate([
            'email' => 'required',
            'password' => 'required'
        ]);
        $user = User::where('email', $request->email)->first();
        if (!$user) {
       return response(['status' => 'error', 'message' => 'user not found']);
        }
        if (Hash::check($request->password, $user->password)) {

            $http = new Client;

            $response = $http->post(url('oauth/token'), [
                'form_params' => [
                    'grant_type' => 'password',
                    'client_id' => '2',
              'client_secret' => 'JhzSRlU6dnJxI1vb8MpWWksjaOo3AdyuL3Mm6ANf',
                    'username' => $request->email,
                    'password' => $request->password,
                    'scope' => '',
                ],
            ]);

        }
    }
    }

这是用户模型的代码

    <?php

namespace App;

use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

这是api

的代码
    <?php

use Illuminate\Http\Request;


Route::post('/register', 'Api\AuthController@register');
Route::post('/login', 'Api\AuthController@login');

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

【问题讨论】:

  • 我认为这是来自 youtube 教程。如果有机会,用户会发布一个名为“使用 Laravel Passport 完成 Api 身份验证”的新视频。代码有点不同,似乎比他的上一个更好。祝你好运!
  • 是的。谢谢

标签: laravel api laravel-5 laravel-passport


【解决方案1】:

这里的第一件事是,您可以按如下方式更改您的邮递员请求,

  1. 添加Headers如下。
  2. 将正文添加为表单数据

最重要的是检查您的端口是否正确,以确保 laravel 服务器正在运行。默认端口是端口 8000。那么你的 url 应该形成为

http://localhost:8000/api/register(注意这个url只是一个示例格式)

尝试进行上述更改并将您所拥有的内容提供给我们。认为这可能会有所帮助。

谢谢

【讨论】:

    【解决方案2】:

    问题是在使用php artisan serve 时,它使用的是single-threaded 的PHP 服务器。

    Web 服务器只运行一个单线程进程,因此如果请求被阻止,PHP 应用程序将停止。

    你可以这样做solution:

    当调用自身时,线程阻塞等待自己的回复。解决方案是将提供应用程序和消费应用程序分离到它们自己的实例中,或者在多线程网络服务器(例如 Apache 或 Nginx)上运行它。

    或者,如果您正在寻找快速修复来测试您的更新 - 您可以通过打开两个命令提示符来完成此操作。第一个将运行php artisan serve(本地我的默认端口是8000,您将在http://localhost:8000 上运行您的站点)。第二个将运行php artisan serve --port 8001

    然后您将发布请求更新为:

        $response = $http->post('http://localhost:8001/oauth/token', [
            'form_params' => [
                'grant_type' => 'password',
                'client_id' => '2',
                'client_secret' =>'5G7yDJFNDsqzVNSJU85ff8DWW6EiKFLGXDDmMmt9',
                'username' => $request->email,
                'password' => $request->password,
                'scope' => '',
            ],
        ]);
    

    这应该有助于您的测试,直到您能够在服务器或本地虚拟主机上进行所有操作。

    【讨论】:

      猜你喜欢
      • 2019-08-02
      • 2018-08-04
      • 2019-02-28
      • 2019-01-04
      • 2020-02-11
      • 2018-01-03
      • 2018-08-10
      • 2018-12-26
      • 1970-01-01
      相关资源
      最近更新 更多