Laravel5.2で認証を用いたAPI作り

API作っていて、ログインしている人にだけ操作させたい~とか、操作した人の情報をデータにくっつけて登録したい~~~といった要望が出てきたので、なんとなくそんな感じのことをしてみます。

ユーザー管理

Laravelではログイン画面やDB等を一式artisanで作ることができます。とても便利です!
artisanの一覧を表示させてみると出てきますので、その通りに実行するだけです。

artisan_list

これでルーティングやviewもできています。DBのマイグレーションを行って、画面(/)にアクセスしてみると…
welcome_window
おおー、できていますね。
register_window
ユーザー登録画面(/register)もあるので、必要項目を入力して”Register”すればusersテーブルに登録がされています。ん~、簡単!

ログイン状態の確認

ユーザー登録・ログイン等の機能ができたので、今まで作成してきたAPIに組み込んでいきたいと思います。

ルーティング

まずはルーティング。最初、私はここでつまづきました。先ほどのartisanでできた認証系のルーティングと同様、middlewareの中に入れるようにしましょう。私は外側に置いてしまっていたので、ログイン情報が取得できなくて彷徨っていました…

こんな感じでOKです。パスとしては /api/article となります。

コントローラー

ログインしている人の情報を取得してみたいので、お試しロジックを入れてみます。
ArticleControllerのGETメソッドの先頭でテストです。
あ、コントローラーの頭にこちらの一行を追加するのを忘れずに。

そしてindexの先頭にユーザー名をリターンする一行を加えて、下記のようにしておきます。

ちなみに、”sato”というユーザー名で登録・ログインしています。この状態で、ブラウザでAPI(/api/article )を叩いてみると…
auth_test
おお~~~、出ました出ました、satoが出ましたヽ(=´▽`=)ノAuth::user()でユーザー情報が取得できていますね!
これを利用してAPIに組み込んでいきますよ~

APIに認証チェックを入れる

認証チェックで処理を分岐

本来ならコンストラクタで共通の認証処理を入れたり、beforeとかでやるのがいいと思うのですが…まぁお試しなのでコントローラーにゴリゴリ書いてしまいます。

やりたいこととしては、記事データの削除を行う際に認証チェックをし、その記事データを登録した本人だけが削除できるようにしてそれ以外はエラーとして返す…というものです。画面側でそのような操作ができないようにしておくことはもちろんですが、APIを直接叩いてくるイヤらしい人もいますからね!API側でもきちんとチェックしてあげるようにします。

こんな感じになりました。

Auth::guest()でそもそもログインしているか確認。
削除しようとしている記事に紐付いているユーザーIDがログインユーザーなのかを確認。
それらをクリアして初めて削除!
となっています。(あ、記事のstoreで、ユーザーIDを記事テーブルに登録するようにしてあります)
これもまた簡単ですね!これでログインしている状態であれば記事の削除ができて、未ログインor自分の投稿した記事じゃない場合には記事の削除ができません!

ということで、APIに認証チェックを入れてみました。改善点は色々ありますが、基本的にはこのような形で事足りるかと思います。
なんか、それっぽいですよね(`・ω・´)シャキーン

スポンサーリンク
レクタングル(大)
レクタングル(大)

シェアする

  • このエントリーをはてなブックマークに追加

フォローする