私はiOSアプリケーション用のLaravel REST APIを開発しています。これはWebパーツがまったくないことを意味し、アプリケーションはCURL要求を介してAPIに通信します。クッキーが使われていますが。Laravel - socket - ratchet - api authentication
今、ソケットがどこにあるのか、オンライン/オフラインのユーザーステータスを確認する必要があります。そして、私はソケット接続でユーザーを認証する方法を理解できません。
すべての例で、私はJSスクリプトがPHPセッションとCookieを使用してLaravelで認証を処理することがわかりました。
私のREST APIのシナリオでは、iOSアプリケーションが後でソケットで使用できるACCESS_TOKENを取得します。
CURLリクエストはログインとパスワードを取得し、JSON フォーマットでアクセストークンを取得し、クッキー内のトークンを更新します。
curl -kX POST https://site/login -b cookies.txt -c cookies.txt -D headers.txt -H 'Content-Type:application/json' -d '
{
"username":"gruzua",
"password":"qwerty09876",
}'
応答
JSON部
{
"access_token":"ACCESS_TOKEN",
"expires_in":600,
}
クッキー部(念のため):各SEで
HTTP/1.1 200 OK
Server: nginx/1.10.3
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: no-cache, private
Date: Wed, 17 May 2017 17:08:09 GMT
Set-Cookie: refreshToken=SOME_REFRESH_TOKEN; expires=Mon, 07-Jan-2019 17:08:09 GMT; Max-Age=51840000; path=/; HttpOnly
quent要求CURLは、私がアクセストークンを持っているし、ソケット接続をオープンする。この時点で 認証
curl -kX GET https://site/user -H 'Authorization: Bearer ACCESS_TOKEN'
にaccess_tokenはトークンを送信します。
http://socketo.me/docs/hello-worldによれば、テルネット接続を開いて、私のACCESS_TOKENを含むJSON形式のデータを書き込むことができます。ラチェットComponentInterface実装onOpenメソッドのサーバー側で私はユーザーの承認を確認する必要があります。おそらくそれは不可能ですonOpen、オプションはメッセージにありますか?とにかく
私の質問は、ここでlaravel認証を使用する方法ですか?
namespace MyApp;
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
class Chat implements MessageComponentInterface {
protected $clients;
public function __construct() {
$this->clients = new \SplObjectStorage;
}
public function onOpen(ConnectionInterface $conn) {
// Store the new connection to send messages to later
/*
Here I have to get somehow the user ACCESS_TOKEN
and to check authorization the way it's checked
when using CURL passes ACCESS_TOKEN in header
Something like this
$user = Auth::user();
if (!emtpy($user))
{
// Check e.g. user permissions (authorization) and allow connection if it's ok
}
else
{
// Reject connection
}
*/
$this->clients->attach($conn);
echo "New connection! ({$conn->resourceId})\n";
}
...
私の知る限り、クライアントはJSON文字列をソケット接続に渡すことができます。サーバー私はACCESS_TOKENの私のoauth_access_tokens laravelデータベースを照会し、私のユーザーモデルを取得し、対応するユーザーデータを読み込むことができます。しかし私はそれが正しい方法ではないと思う、私が望むように慣れていないLaravelのガード/ミドルウェアや他のコップの力を使いたいのだが、それは大変に必要だと感じている。だから私は手ではなく、laravelに仕事をさせる認証を確認したい。
私はこのトピックLaravel Ratchet socket Authを知っていますが、セッションとクッキーをリクエストしていますが、これは私の場合は不可能です。