Редактировать:
Это может быть не лучший способ. Но это то, что я сделал в то время. Я попробовал curl и guzzle, чтобы создать запрос с файлом cookie сеанса и всем в заголовке, чтобы он выглядел как запрос из веб-браузера. Не удалось заставить это работать.
Я использовал идентификатор канала веб-сокета для браузера, в котором я хочу, чтобы изменения произошли, и объединил его с другими вещами, а затем зашифровал его с помощью encrypt($string)
. После этого я использовал зашифрованную строку для создания QR-кода.
Мобильное приложение (которое уже входило в систему как аутентифицированный пользователь) отсканировало его и сделало почтовый запрос с этой строкой QR и другими данными. Паспорт позаботился об аутентификации этого запроса. После расшифровки строки QR у меня был идентификатор канала веб-сокета.
Затем я транслировал на этом канале правильные событие и данные. Перехватил эту трансляцию в браузере и перезагрузил эту страницу с помощью JavaScript.
/*... processing other data ...*/
$broadcastService = new BroadcastService();
$broadcastService->trigger($channelId, $eventName, encrypt($$data));
/*... returned response to the mobile app...*/
Моя служба вещания:
namespace App\Services;
use Illuminate\Support\Facades\Log;
use Pusher\Pusher;
use Pusher\PusherException;
class BroadcastService {
public $broadcast = null;
public function __construct() {
$config = config('broadcasting.connections.pusher');
try {
$this->broadcast = new Pusher($config['key'], $config['secret'], $config['app_id'], $config['options']);
} catch (PusherException $e) {
Log::info($e->getMessage());
}
}
public function trigger($channel, $event, $data) {
$this->broadcast->trigger($channel, $event, $data);
}
}
С моей точки зрения :
<script src="{{asset('assets/js/pusher.js')}}"></script>
<script src="{{asset('assets/js/app.js')}}" ></script>
<script>
<?php
use Illuminate\Support\Facades\Cookie;
$channel = 'Channel id';
?>
Echo.channel('{{$channel}}')
.listen('.myEvent' , data => {
// processing data
window.location.reload();
});
</script>
Для этого я использовал Laravel Echo.
Опять же, это не лучший способ сделать это. Это то, что просто сработало для меня для этой конкретной функции.
Там может быть много лучших способов сделать это. Если кто-то знает лучший подход, пожалуйста, дайте мне знать.
Насколько я понимаю, вы хотите реализовать создание и аутентификацию пользователей через REST. А затем получить данные из базы данных. Поправьте меня если я ошибаюсь.
И я предполагаю, что вы уже знаете, как общаться через API с помощью токена. Вы просто застряли в том, как реализовать это с помощью laravel.
Вы можете использовать Laravel Passport для аутентификации. У него очень хорошая документация.
Также воспользуйтесь этой статьей medium. а>. Это поможет вам пройти пошаговый процесс.
person
omar jayed
schedule
01.04.2020