public function vkcallback() { // Init OAuth 2.0 proxy $oauth2Proxy = new Oauth2Proxy(Config::get("vk.appId"), Config::get("vk.secret"), 'https://oauth.vk.com/access_token', 'https://oauth.vk.com/authorize', 'code', 'http://' . $_SERVER['HTTP_HOST'] . '/login/vkcallback', 'offline,notify,friends,photos,audio,video,wall'); // Try to authorize client if ($oauth2Proxy->authorize() === true) { // Init vk.com SDK $vkPhpSdk = new VkPhpSdk(); $vkPhpSdk->setAccessToken($oauth2Proxy->getAccessToken()); $vkPhpSdk->setUserId($oauth2Proxy->getUserId()); // API call - get profile $result = $vkPhpSdk->api('getProfiles', array('uids' => $vkPhpSdk->getUserId(), 'fields' => 'uid, first_name, last_name, nickname, screen_name, photo_big, email, photo')); } else { // handle error exception here die("error"); return redirect('/'); } $accessToken = $oauth2Proxy->getAccessToken(); if (!@$result['response'][0]['uid']) { die($result[0]['uid']); return redirect('/'); } $vkUid = $result['response'][0]['uid']; $gotoProfileCompletePage = false; $profile = Profile::whereUid($vkUid)->first(); if (empty($profile)) { $user = new User(); $user->name = $result['response'][0]['first_name'] . ' ' . $result['response'][0]['last_name']; $user->email = $result['response'][0]['screen_name']; $user->photo_large = $result['response'][0]['photo_big']; $user->photo_small = $result['response'][0]['photo']; $user->save(); $profile = new Profile(); $profile->uid = $vkUid; $profile->username = $result['response'][0]['screen_name']; $profile->origin = 'vk'; $profile->access_token = $accessToken; $profile->access_token_secret = $accessToken; $profile = $user->profiles()->save($profile); // first time, need to complete profile $gotoProfileCompletePage = true; } $profile->access_token = $accessToken; $profile->save(); $user = $profile->user; Auth::login($user); if ($gotoProfileCompletePage) { return redirect('/login/complete'); } else { return redirect('/'); } }