ソーシャルネットワーク(Ulogin)を介したLaravelでの承認。 シンプル、柔軟、効率的。

こんにちは友人。 今日は、Uloginプラグインを使用して、ソーシャルネットワークを介してユーザーを簡単かつ効率的に承認/登録する方法についての私の意見を共有したいと思います。 このプラグインを使用する理由 彼は、各ソーシャルネットワークと個別に同期するときに発生する頭痛の種から開発者を救うことができるからです。 さらに、プラグインから単一の美しい形式でデータを取得できます。



読者はLaravel 5.3フレームワークを理解していると思いますので、単純なことは噛みません。 それではどこから始めますか? 最初に、登録および認証ページでJSプラグインを接続する必要があります。 個人的には、個別のauth / social.blade.phpテンプレートを作成することでこれを行い、そこに次の単純なコードを配置します。



{{-- Social buttons--}} <div class="text-center margin-bottom-20" id="uLogin" data-ulogin="display=panel;theme=flat;fields=first_name,last_name,email,nickname,photo,country; providers=facebook,vkontakte,odnoklassniki,mailru;hidden=other; redirect_uri={{ urlencode('http://' . $_SERVER['HTTP_HOST']) }}/ulogin;mobilebuttons=0;"> </div> @section('js') <script src="//ulogin.ru/js/ulogin.js"></script> @endsection
      
      





コードの説明を少し。 urlencodeは、http形式で送信するために文字列を通常にエンコードするために使用されます。 Redirect_uriはUloginサーバーからステータスとデータを含む応答を受け取ります。 [フィールド]フィールドでは、ソーシャルネットワークから取得する必要があるデータを示します。 テンプレートの最後に、プラグイン自体をプラグインします。 ここで、コードは 'js'ブロックに挿入されます。これは、メインテンプレートに記述する必要があります。yield( 'js')



はい、一瞬。 SSLで作業している場合は、「http://」の代わりに「https://」を指定します。 その後、安全でないデータ転送に関する警告はありません。



テンプレートの準備ができたら、テンプレートに1行挿入するだけで、登録およびログインページで必要な場所にテンプレートを接続します。include( 'auth.social')



これで、ソーシャルネットワークを選択できる素敵なウィジェットが登録ページに表示されます。 ソーシャルネットワークのボタンをクリックすると、特定のソーシャルネットワークでの承認用の新しいウィンドウが開きます(もちろん、承認されていない場合)。



次に、バックエンド部分を作成する必要があります。 つまり、コントローラーとルートを作成します。 ルートはUloginサーバーから応答を受信し、コントローラーに送信します。



UloginController.phpというコントローラーを作成し、リクエストの転送先となるパブリックログインメソッドを書き込みます。



ルートを作成します。Route :: post( 'ulogin'、 'UloginController @ login');



もう1つのニュアンスがあります! LaravelはCSRF攻撃から保護されています。 つまり、別のサーバーからのデータ転送にはセキュリティトークンがなく、セキュリティエラーが発生します。 これを修正するには、ルート(パス)の例外をミドルウェアVerifyCsrfToken.phpに登録する必要があります:protected $ except = ['ulogin'];



これで、サーバーが「/ ulogin」に応答を返すと、セキュリティトークンは無視され、エラーは発生しなくなります。



次に、コントローラー自体を記述します。



 <?php /** * Ulogin.ru auto registration or login. */ namespace App\Http\Controllers; use App\User; use Auth; use Hash; use Illuminate\Http\Request; use Redirect; class UloginController extends Controller { // Login user through social network. public function login(Request $request) { // Get information about user. $data = file_get_contents('http://ulogin.ru/token.php?token=' . $_POST['token'] . '&host=' . $_SERVER['HTTP_HOST']); $user = json_decode($data, TRUE); $network = $user['network']; // Find user in DB. $userData = User::where('email', $user['email'])->first(); // Check exist user. if (isset($userData->id)) { // Check user status. if ($userData->status) { // Make login user. Auth::loginUsingId($userData->id, TRUE); } // Wrong status. else { \Session::flash('flash_message_error', trans('interface.AccountNotActive')); } return Redirect::back(); } // Make registration new user. else { // Create new user in DB. $newUser = User::create([ 'nik' => $user['nickname'], 'name' => $user['first_name'] . ' ' . $user['last_name'], 'avatar' => $user['photo'], 'country' => $user['country'], 'email' => $user['email'], 'password' => Hash::make(str_random(8)), 'role' => 'user', 'status' => TRUE, 'ip' => $request->ip() ]); // Make login user. Auth::loginUsingId($newUser->id, TRUE); \Session::flash('flash_message', trans('interface.ActivatedSuccess')); return Redirect::back(); } } }
      
      





コードからわかるように、まずデータベースにそのような電子メールアドレスを持つユーザーがいるかどうかを確認します。 もしあれば、すぐにログインします。 そうでない場合は、まずデータベースにユーザーを作成してからログインします。 ソーシャルネットワークは指定されたアドレスの確認を必要とするため、誰かが他の誰かのアカウントにログインするためにあなたのサイトに既に登録されている人のメールアドレスでソーシャルネットワークにアカウントを作成する可能性は事実上無効になります。



データベース内のどのフィールドがコードから見えるか。 テキストメッセージを表示するには、trans()翻訳機能を使用します。これにより、サイト上の任意の言語を使用できます。



以上です。 シンプル、効率的、非常に柔軟。 次回は、時間があれば、ゲストが投稿を気に入ったとき、またはサイトにコメントを作成するためのボタンを押したときに、自動的にログイン/ユーザーを登録する方法について説明します。 ここではすべてがより複雑ですが、柔軟で効率的です。



All Articles