我创建了一个基本的laravel护照身份验证并创建了回调并重定向以授权用户以下是我的代码
Route::get('/redirect', function () {
$query = http_build_query([
'client_id' => 4,
'redirect_uri' => 'http://localhost:8000/callback',
'response_type' => 'code',
'scope' => '',
]);
return redirect('http://localhost:8000/oauth/authorize?'.$query);
});
Route::get('/callback', function (Request $request) {
$http = new GuzzleHttp\Client;
$response = $http->post('http://localhost:8000/oauth/token', [
'form_params' => [
'grant_type' => 'authorization_code',
'client_id' => 4,
'client_secret' => 'MUqUFrtAx3ix84zFTxwqQXA5PQDY7SWwVFW9tCNX',
'redirect_uri' => 'http://localhost:8000/callback',
'code' => $request->code,
],
]);
return json_decode((string) $response->getBody(), true);
});
我按照https://laravel.com/docs/5.4/passport上提供的步骤操作,但是当我点击“授权”按钮时,页面会继续加载而没有任何响应,我必须重新启动artisan serve
。可能的问题是什么?
答案 0 :(得分:0)
在您的 /重定向路径中,您提供相同的localhost:8000 。更改您的 redirect_uri 并在回调路径中犯同样的错误。
更改您的 'redirect_uri'=>'http://localhost:8000/callback', 收件人 'redirect_uri'=>'http://localhost:8001/callback',
注意:我正在端口8001上运行其他项目。您可以使用自己的来更改它:)
答案 1 :(得分:0)
问题是使用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' => 'authorization_code',
'client_id' => 4,
'client_secret' => 'MUqUFrtAx3ix84zFTxwqQXA5PQDY7SWwVFW9tCNX',
'redirect_uri' => 'http://localhost:8000/callback',
'code' => $request->code,
],
]);
这应该在测试期间有所帮助,直到您能够访问服务器或本地虚拟主机上的所有内容为止。
答案 2 :(得分:0)
尝试使用XAMPP或其他Web服务器,而不只是使用 public class Program {
public static void Main(string[] args) {
double size;
int menu;
bool running = true;
while (running) {
Console.WriteLine("1. Add a city");
Console.WriteLine("2. View cities");
Console.WriteLine("3. Remove a city");
Console.WriteLine("4. Quit");
string str = Console.ReadLine();
int.TryParse(str, out menu);
var city = new stad();
switch (menu) {
case 1:
Console.Write("The amount of cities you want to add: "); //Anga temperatur som ska anges
size = double.Parse(Console.ReadLine());
//for loop för att ange värderna
for (int i = 0; i < size; i++) {
Console.Write($"City {(i+1)} : ");
string stadString = Console.ReadLine();
city.City.Add(stadString);
Console.Write($"Temperature for city {(i+1)} : ");
double stadDouble = double.Parse(Console.ReadLine());
city.Temperature.Add(stadDouble);
}
Console.Clear();
break;
case 2:
break;
case 3:
break;
case 4:
running = false;
break;
}
}
Console.ReadLine();
}
}
class stad {
public List<string> City { get; set; }
public List<double> Temperature { get; set; }
}