Craft 3 の Element API でログインユーザーのみアクセス可能なエンドポイントを作成する方法をご紹介します。
Element API を定義する config/element-api.php
の先頭に下記の関数を追加します。
function requireLogin() {
$currentUser = Craft::$app->user->getIdentity();
if (!$currentUser) {
throw new \yii\web\ForbiddenHttpException('Unauthorized access');
}
}
getIdentity()
は Yii2 のパブリックメソッドで、ユーザーがログイン状態の場合に identify
オブジェクトを返してくれます。
有効なログインセッションがなく、false
もしくは null
が返った場合、つまりログインしていない場合は 400
エラーを返すようにします。
そして、この関数を、エンドポイントを定義する関数の最初に入れてあげれば OK です。
return [
'endpoints' => [
'news.json' => function() {
requireLogin(); // こに追加
return [
'elementType' => Entry::class,
'criteria' => ['section' => 'news'],
'transformer' => function(Entry $entry) {
return [
'title' => $entry->title,
'url' => $entry->url,
'jsonUrl' => UrlHelper::url("news/{$entry->id}.json"),
'summary' => $entry->summary,
];
},
];
},
]
];