2017-02-19 16 views
11

私はモバイルアプリを開発中で、現在はJWTに依存してAPIのステートレス性を維持しています。 APIはモバイルデバイスやWebデバイスで消費されます。ユーザーは電子メールとパスワードを使用して登録します。Laravel 5.3 - 社会的なログインに疑問がある

私はこのAPIでソーシャルログインオプションを実装するように割り当てられています。私は以下の疑問を解決したいと思います。

1)ソーシャル・ログインを使用する場合、クライアント側で保存されるトークン[like JWT]をどのように生成できますか?このトークンは、ログイン後にすべての後続の要求とと​​もに送信されるはずです。

2)ソーシャルプラットフォームが[私たちの主キーの1つである]電子メールアドレスを提供/共有していない場合は、どのような情報を保存しますか?

+0

ソーシャルログインは認証されたユーザーを確認するだけです。あなたはその特定のユーザーのデータベースにユーザーレコードを残しておくでしょう。だから彼らがログインした後は、あなたがいつもそうしているのと同じ方法でJWTを作成します。メールアドレスを入力しないことを心配しているプラ​​ットフォームはどれですか?ちょうどすべてのサービスにもいくつかのタイプのユーザーIDがあるので、あなたのユーザーテーブルには 'facebook_id'' twitter_idなどのフィールドがあります。 – Pitchinnate

+0

ソーシャルプラットフォームのほとんどはあなたにメールアドレスを提供します(Twitterは信じていません)。私は、Webオブジェクトのラウンドトリップが成功した後に、あなたのアプリケーションにリダイレクトすることができると仮定します。 –

+0

@logeeks質問に対する答えを見つけましたか? –

答えて

1

SHORT ANSWERすでにいつもの識別IDを返す

  • ソーシャルログインを行っているとして、あなたはあなたの標準的なユーザーテーブルに、ソーシャルログインユーザをリンクし、(JWT)トークンを生成する必要が

    1. 社会のユーザー。外部表では、一緒にあなたのメインユーザーテーブルのuser_idを

    LONG ANSWER

    で、社会的な使用とsocial_idを保存するのが良いを持っているために、最初から始めましょうすべての問題の視点と疑問のすべての側面をクリアします。

    基本的なユーザ・テーブル
    通常あなたは(簡体字)このように構成さUsersテーブルを持っている

    • のuser_id
    • ログイン(Eメール)
    • パスワード
    • jwt_token

    ユーザーのログイン時APIを消費するために、jwt_tokenフィールドを更新してユーザーに返します。社会的なログインを追加するための良い方法は以下の(簡体字)として構成新しいsocial_loginsテーブルを作成することです
    社会的なログインを実装

    • 社会的
    • をsocial_id
    をUSER_ID

    ユーザーに「ソーシャルログイン」すると、そのユーザーからのデータの一覧が表示されますcialネットワークそのもの。あなたが明示的にそれを要求している場合でも、ユーザーは私的メールアドレス(例えばFacebookから)の検索を禁止することができます。

    まず、ソーシャルにあなたのメールアドレスが返されたかどうかを確認する必要があります。電子メールが返された場合、ユーザーテーブルにそのメールアドレスを持つユーザーを探して、電子メールが空白の場合

  • のuser_idフィールドを使用して、ユーザーとの関係を作成する「social_logins」テーブルにレコードを作成

    • あなたはsocial_loginレコードを作成します。

    二重ユーザー(異なる電子メールアドレス)を作成しないようにするには、ユーザーテーブルに新しいユーザーを作成する必要があります。私はいつもあなたのメールアドレスを確認するようにユーザーに頼んでいます。この簡単な質問で前のチェックを延期することができます。二重ユーザーの量を減らす。そのため、ソーシャル・ログインによって電子メール・アドレスが返されない場合は、空のフィールドを表示してユーザーに電子メール・アドレスを入力し、ユーザー・テーブル内のユーザーを探すために使用します。代わりにあなたがそれを持っている場合、ユーザーに別のアドレスを使用することを好むか、彼が既に別の電子メールアドレスであなたのアプリに登録されている場合、電子メールアドレスを確認するか変更するように要求します。

  • +0

    この日、Laravel Socialite https://www.sitepoint.com/easily-add-social-logins-to-your-app-with-socialite/を使って、サイトポイントで本当に素晴らしい記事が書かれています。 –

    0

    一部のソーシャルネットワークでは、代わりにユーザー認証を委任することも、自分のシステムに資格情報を要求することもできます。ユーザーがログインすると、外部プラットフォームからユーザーの情報を取得するために使用できるアクセストークンが提供されます。

    このデータを使用して、ユーザーを自分のシステムに登録します。提供されているアクセストークンも添付してください。要求した権限に応じて、トークンを使用してソーシャルプラットフォームで追加の操作を実行できます。

    次に、ユーザーがログオンしているweb/mobileアプリケーションで認証トークンとして使用するJWTを発行します。このJWTは、認証プロバイダが送信したアクセストークンとは独立している必要があります。 subまたはexpのような興味のある主張を含め、秘密鍵で署名してください。あなたがGoogleやFacebookのようないくつかの認証システムを使用する予定がある場合、それは同じユーザごとに異なる可能性があるため、たとえば

    { 
        "sub": "userid",  //unique user id assigned in your system 
        "name": "User name" //Name provided by social 
        "iss": "issuer",  //you are the issuer 
        "exp": 1300819380, //Expiration date 
        "login":"facebook" //login method used 
        } 
    

    ために、一意の識別子として電子メールを使用しないでください。ユーザーが異なるネットワークにあるアカウントをリンクするには、追加の登録プロセスが必要です。たとえば、ユーザーが他のシステムで使用している識別子を設定させるか、ユーザーがFacebookによってログに記録されたときにTwitterでログインプロセスを起動させる

    関連する問題