Skip to content

Commit

Permalink
php: added instagram auth
Browse files Browse the repository at this point in the history
  • Loading branch information
sahat committed Sep 6, 2015
1 parent a339e7d commit 866bc69
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 0 deletions.
61 changes: 61 additions & 0 deletions examples/server/php/app/Http/Controllers/AuthController.php
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*/
Expand Down
1 change: 1 addition & 0 deletions examples/server/php/app/Http/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down

0 comments on commit 866bc69

Please sign in to comment.