From 866bc6974ade2902696c21629a3bc67110f5327b Mon Sep 17 00:00:00 2001 From: Sahat Yalkabov Date: Sun, 6 Sep 2015 14:36:15 -0700 Subject: [PATCH] php: added instagram auth --- .../app/Http/Controllers/AuthController.php | 61 +++++++++++++++++++ examples/server/php/app/Http/routes.php | 1 + 2 files changed, 62 insertions(+) diff --git a/examples/server/php/app/Http/Controllers/AuthController.php b/examples/server/php/app/Http/Controllers/AuthController.php index e8e607be..6768e006 100644 --- a/examples/server/php/app/Http/Controllers/AuthController.php +++ b/examples/server/php/app/Http/Controllers/AuthController.php @@ -465,6 +465,67 @@ public function foursquare(Request $request) } } + /** + * Login with Instagram. + */ + public function instagram(Request $request) + { + $accessTokenUrl = 'https://api.instagram.com/oauth/access_token'; + + $params = [ + 'code' => $request->input('code'), + 'client_id' => $request->input('clientId'), + 'client_secret' => Config::get('app.instagram_secret'), + 'redirect_uri' => $request->input('redirectUri'), + 'grant_type' => 'authorization_code', + ]; + + $client = new GuzzleHttp\Client(); + + // Step 1. Exchange authorization code for access token. + $accessTokenResponse = $client->post($accessTokenUrl, ['body' => $params]); + $accessToken = $accessTokenResponse->json(); + + + + // Step 2a. If user is already signed in then link accounts. + if ($request->header('Authorization')) + { + $user = User::where('instagram', '=', $accessToken['user']['id']); + if ($user->first()) + { + return response()->json(array('message' => 'There is already an Instagram account that belongs to you'), 409); + } + + $token = explode(' ', $request->header('Authorization'))[1]; + $payload = (array) JWT::decode($token, Config::get('app.token_secret'), array('HS256')); + + $user = User::find($payload['sub']); + $user->instagram = $accessToken['user']['id']; + $user->displayName = $user->displayName || $accessToken['user']['username']; + $user->save(); + + return response()->json(['token' => $this->createToken($user)]); + } + // Step 2b. Create a new user account or return an existing one. + else + { + $user = User::where('instagram', '=', $accessToken['user']['id']); + + if ($user->first()) + { + return response()->json(['token' => $this->createToken($user->first())]); + } + + $user = new User; + $user->instagram = $accessToken['user']['id']; + $user->displayName = $accessToken['user']['username']; + $user->save(); + + return response()->json(['token' => $this->createToken($user)]); + } + } + /** * Login with GitHub. */ diff --git a/examples/server/php/app/Http/routes.php b/examples/server/php/app/Http/routes.php index eaf5bf1a..53f2e68f 100644 --- a/examples/server/php/app/Http/routes.php +++ b/examples/server/php/app/Http/routes.php @@ -15,6 +15,7 @@ Route::post('auth/twitter', 'AuthController@twitter'); Route::post('auth/facebook', 'AuthController@facebook'); Route::post('auth/foursquare', 'AuthController@foursquare'); +Route::post('auth/instagram', 'AuthController@instagram'); Route::post('auth/github', 'AuthController@github'); Route::post('auth/google', 'AuthController@google'); Route::post('auth/linkedin', 'AuthController@linkedin');