Laravel 4 login facebook



几个月前,我用一个facebook应用程序创建了登录名。现在我在一个新项目上,我使用了这些路线和控制器(与上一个项目相同(,但使用了一个新的facebook应用程序,我出现了这个错误

Undefined index: username

app/routes.php

Route::get('login/fb', array('as' => 'facebook.login','uses' => 'SessionController@facebook'));
Route::get('login/fb/callback', array('as' => 'facebook.callback','uses' => 'SessionController@callback'));
Route::get('register',array('as' => 'session.signup','uses' => 'SessionController@create'));
Route::get('logout',array('as' => 'session.logout','uses' => 'SessionController@destroy'))->before('auth');

app/controllers/SessionController.php

<?php
class SessionController extends BaseController {
public function create()
{
    return View::make('sessions.create');
}
public function store()
{
    $data = array();
    if (Auth::check()) {
        $data = Auth::user();
        return Redirect::intended('/profile')->with('AlertMessage','<p class="alert alert-success">Has iniciado sesión <strong>correctamente</strong></p>');
    }
    return Redirect::intended('/profile')->with('AlertMessage','<p class="alert alert-danger">El usuario y/o la contraseña son <strong>incorrectos</strong></p>');
}
public function show()
{   
        return View::make('sessions.view');
}
public function destroy()
{
    Auth::logout();
    return Redirect::to('/')->with('AlertMessage','<p class="alert alert-info">Has cerrado sesión <strong>correctamente</strong></p>');
}
public function callback()
{
    $code = Input::get('code');
    if (strlen($code) == 0) return Redirect::to('/')->with('message', 'There was an error communicating with Facebook');
    $facebook = new Facebook(Config::get('facebook'));
    $uid = $facebook->getUser();
    if ($uid == 0) return Redirect::to('/')->with('message', 'There was an error');
    $me = $facebook->api('/me');
    $user = User::whereUid($uid)->first();
    if (empty($user)) {
      $user = new User;
      $user->first_name = $me['first_name'];
      $user->last_name = $me['last_name'];
      $user->email = $me['email'];
      $user->username = $me['username'];
      $user->uid = $uid;
        $user->save();
    }
    $user->access_token = $facebook->getAccessToken();
    $user->save();
    Auth::login($user);
    return Redirect::to('/')->with('message', 'Logged in with Facebook');
}
public function facebook()
{
    $facebook = new Facebook(Config::get('facebook'));
    $params = array(
        'redirect_uri' => route('facebook.callback'),
        'scope' => 'email',
    );
    return Redirect::to($facebook->getLoginUrl($params));
}
}

这个代码适用于我的旧facebook应用程序,但不适用于新应用程序。知道这个问题吗?我更改了新应用程序的app_id和secret,这样就不会有解决方案了。

我的"用户"表:

<?php
use IlluminateDatabaseSchemaBlueprint;
use IlluminateDatabaseMigrationsMigration;
class CreateUsersTable extends Migration {
public function up()
{
    Schema::create('users', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('username',100);
        $table->string('first_name',100)->nullable();
        $table->string('last_name',100)->nullable();
        $table->string('email',100);
        $table->biginteger('uid');
        $table->string('access_token');
        $table->string('access_toker_secret');
        $table->text('remember_token',100);
        $table->string('nickname');
        $table->timestamps();
        $table->unique('username');
        $table->unique('email');
        $table->index('username');
        $table->index('email');
    });
}

public function down()
{
    Schema::drop('users');
}
}

如果我测试我的旧facebook应用程序,我的代码可以正常工作。这可能是facebook应用程序的权限问题吗?

我解决了我的问题。中的用户名不再可用。由于这个原因,我无法获得它。查看此链接:

https://developers.facebook.com/docs/apps/changelog

最新更新