• Home
  • Craft CMS
  • Craft 3 の Element API でログインユーザーのみアクセス可能なエンドポイントを作成する

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,
          ];
        },
      ];
    },
  ]
];

参考