我正在尝试建立一个身份验证终结点,当使用Laravel 5.6
对用户的密钥进行身份验证时,将返回该用户的密钥。
使用Postman
在localhost:8000
上进行测试时,我发现它接受了请求,但未输出任何内容。 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();
});
答案 0 :(得分:1)
问题是使用php artisan serve
时,它使用的是single-threaded的PHP服务器。
Web服务器仅运行一个单线程进程,因此如果请求被阻止,PHP应用程序将停止运行。
您可以这样做solution:
在对其自身进行调用时,线程将阻塞以等待其自己的回复。解决方案是将提供的应用程序和使用的应用程序分离到各自的实例中,或者在诸如Apache或nginx的多线程Web服务器上运行它。
或者,如果您正在寻找快速修复程序来测试您的更新-您可以通过打开两个命令提示符来完成此操作。第一个将运行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' => '',
],
]);
这应该在测试期间有所帮助,直到您能够访问服务器或本地虚拟主机上的所有内容为止。
答案 1 :(得分:0)
这里的第一件事是,您可以按以下方式更改邮递员的请求,
最重要的是检查您的端口是否正确运行了laravel服务器。默认端口是端口8000。然后您的网址应形成为
http://localhost:8000/api/register(请注意,此网址仅是示例格式)
尝试进行上述更改,并提供给我们您所拥有的。认为这可能有所帮助。
谢谢