🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Vuex

Vuexは、Vue.js アプリケーションのための状態管理ライブラリです。アプリケーション内で使用するコンポーネントのための集中データストアを提供。コンポーネント同士でデータをやり取りし、処理のフローを一貫させたり、データの見通しを良くすることができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

988閲覧

laravelのアプリケーションで非同期通信でログイン中のユーザを取得したい。

yakito-morokosi

総合スコア11

Vuex

Vuexは、Vue.js アプリケーションのための状態管理ライブラリです。アプリケーション内で使用するコンポーネントのための集中データストアを提供。コンポーネント同士でデータをやり取りし、処理のフローを一貫させたり、データの見通しを良くすることができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/01/02 03:28

編集2020/01/03 00:24

前提、実現したいこと

laravelのアプリケーションで一部非同期通信でユーザを取得したい。
フロントはvueでaxiosを使っています。
内容としては、crudのように作成、更新、削除等を行っています。
そこで、そのユーザに更新、削除権限があるか調べたいので、ユーザを取得したいです。
認証はlaravelのデフォルトの認証とGoogle認証を使用しています。

詳しめに書くと

ログイン中のユーザがリンクを踏んだら
リンク先のコントローラでトークンを発行して
リンク先のviewでvueにトークンを渡して
ユーザがそのページで更新等をしたら、データをaxiosでcontrollerに送信して
コントローラでuserを取得して、そのユーザにそのデータに対しての更新権限があるかを確認して、データの変更を行うかを判断したい

試したこと

jwtを使ってみたのですが、Google認証をしているユーザだと、passwordがランダムに設定されているため、使用できないかなと思いました。
Passportを使ってみたのですが、こちらもpasswordが必要なのと、アカウント作成時にclientをuserに結び付ける方法がわからなかったので質問させていただきました。

参考にしたサイト

JWT
1つ目
2つ目
3つ目
4つ目
5つ目

回答して欲しいこと

何を使ってもいいので、安全にシンプルに上記の実現したい機能を作成する方法を教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/01/02 04:07

JWTはパスワードは必要ないですよ。 低質なサイトだとJWTにパスワード入れてますが、 ヘッダー部・入力部・照明部 となっており入力部は誰でも複合可能(base64だったけ)なのでパスワードいれたら流出します。
yakito-morokosi

2020/01/02 05:39

回答ありがとうございます。 ネットでいくつかのサイトをみてみたのですが、 どこのサイトでもトークンを生成するときに $token = auth('api')->attempt(['email' => $request->email, 'password' => $request->password]); のようにemailとpasswordを使っているようなのですが、emailとpasswordを使わなくてもトークンを発行できるのでしょうか?
mikkame

2020/01/02 07:36

発行したJWTにはパスワードを入れなくて良い って意味では?
m.ts10806

2020/01/02 12:00

>ネットでいくつかのサイトをみてみたのですが 参考した先が本当に参考になるかどうかはその記事URL提示していただかないとこちらも判断できませんので、質問本文に参照先を追記してください
m.ts10806

2020/01/03 00:23 編集

細かくて申し訳ないですが、マークダウンでリンクにしてもらえればと。 (URLコピーしてって結構手間なのです・・・)
guest

回答1

0

ベストアンサー

Google認証をしているユーザだと、passwordがランダムに設定されているため、使用できないかなと思いました。

jwtが発行されている時点で、そのjwtに書き込まれた情報は正しい(署名)されているので、パスワードは関係ありません。
Google認証(Sociliate)された時点で認証済みとなると思います

アカウント作成時にclientをuserに結び付ける方法がわからなかったので質問させていただきました。

ここでいうclientは、ユーザー毎ではなく、開発者毎に発行するもの、と考えると理解しやすいかと思います。
FacebookとかTwitteとかGithubでも同様で、全てのユーザに発行するのではなく、開発者、アプリ毎に発行し、開発者に対して管理権限を渡すために、ユーザIDを指定しています。
サードパーティにAPIを提供するわけではないのなら、1個だけ自分用にclientを発行すれば良いだけとなります。

投稿2020/01/03 07:23

mikkame

総合スコア5036

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yakito-morokosi

2020/01/04 06:00

回答ありがとうございます! 手探り状態でやっているため、見当違いなことを言っていたらすみません。 jwtの発行というのはトークンを生成するということでしょうか? passportはユーザの認証に使うものではなく、管理者であるかを判断するものということでしょうか? それとも、clientは管理者だけでよく、一般のユーザの認証にはclientに登録することなく認証ができるということでしょうか? いくつも質問してしまいすみません。 とりあえず、やりたいこととしては ユーザがPostを作成して そのPostに対して編集、削除ができるのは作成したユーザのみ というものです。 どのようなやり方がオーソドックスなのでしょうか?
mikkame

2020/01/04 06:29

追加の質問を一旦無視します。すみません まず、GithubでログインやFacebookでログインのようなOAuthログインについては理解されているでしょうか? OAuthログインを提供するためのライブラリがPassportです。 OAuthを第三者(私たち外部のプログラマ)が利用するためにシークレットトークンを発行してもらいますがこの部分がPassportのclientです。
mikkame

2020/01/04 06:31

> ユーザがPostを作成して > そのPostに対して編集、削除ができるのは作成したユーザのみ これについては、jwtもpassportも関係ありません、 jwtとpassportが認証と呼ばれる分野のもの(ログインとかユーザー識別)で > そのPostに対して編集、削除ができるのは作成したユーザのみ は認可(操作を許可する、拒否する)と呼ばれる分野です。 これは、LaravelでやるならPolicyで制御するのが一般的かと思います
yakito-morokosi

2020/01/04 07:07

> OAuthを第三者(私たち外部のプログラマ)が利用するためにシークレットトークンを発行してもらいますがこの部分がPassportのclientです。 そうだったんですね! 勘違いしてました! > これは、LaravelでやるならPolicyで制御するのが一般的かと思います PolicyだとUserが必要だったと思います。 そのUserを取得したいのですが、普通にuser_idをvueからaxiosで持ってくるとするとuser_idを書き換えるだけでなりすましができてしまうと思います。 そこで認証時にトークンを生成して、そのトークンを用いることでなりすましを防ぐことができるかなと考え、 JWTや passportを使用すればトークンを発行できると知り、 やってみようとしたところ、jwtはトークンを生成するときにpasswordとemailを使っているようだったので、 Google認証でユーザ登録した人にはpasswordとemailがないので、どのようにすれば良いのかがわからず、今回の質問をさせていただきました。 質問が戻ってしまい悪いのですが、apiでUserを取得するにはどのようにすれば良いのでしょうか? また見当違いなことを書いていたらすみません。
mikkame

2020/01/04 07:36

> JWTや passportを使用すればトークンを発行できると知り、 > やってみようとしたところ、jwtはトークンを生成するときにpasswordとemailを使っているようだったので、 初回にトークンを発行するにはログイン情報が必要なので 少なくとも1回目はpasswordが必要です。認証するためです。 > Google認証でユーザ登録した人にはpasswordとemailがない passwordとemailがなくても、google認証されている時点で特定のUserとして紐づいているはずです。 email/password、Google、どちらも認証を行います。 JWTは、認証された後の、ログインの維持のため(セッション)に使用されますのでそこを切り分けて考えてみてはどうでしょうか?
yakito-morokosi

2020/01/05 00:31

ありがとうございます! laravelのデフォルトのログイン方法でログインしてから、 トークンを生成するために $user = $request->user(); $token = auth()->login($user); として、$tokenの中身を見てみるとnullとなっていて、トークンが生成されませんでした。 $userの中身を見てみると、remember_tokenの値がnullとなっていました。 ログイン時にUserモデルからtokenを生成してを生成して、 リンクを飛んだ後もtokenからUserを取得したいので、auth()->login($user)でトークンが生成できるならよかったのですが、何かやり方が違うのでしょうか? 何度も質問をしてしまってすみません!
yakito-morokosi

2020/01/05 22:21

ありがとうございます! 無事、トークンを生成することができました! トークンからユーザを持ってくることも成功しました! 何度も助言をいただき、本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問