2014-09-16 4 views
1

Я только начал работать с летним проектом Laravel для моей стипендии, и основной путь, препятствующий прогрессу, мешает. Любая помощь будет принята с благодарностью. Рассказ ниже.Laravel Login/User Issue with Remember Token

После Laravel запущена и работает, и я пытаюсь войти, я получаю эту ошибку:

Class User contains 3 abstract methods and must therefore be declared abstract or 
implement the remaining methods 
(Illuminate\Auth\UserInterface::getRememberToken, 
Illuminate\Auth\UserInterface::setRememberToken, 
Illuminate\Auth\UserInterface::getRememberTokenName) 

Я полагал, что это может быть исправлено с помощью http://laravel.com/docs/upgrade#upgrade-4.1.26 и поэтому я добавил следующие строки в мой пользователь как было предложено:

public function getRememberToken(){ return $this->remember_token; } 
public function setRememberToken($value){ $this->remember_token = $value; } 
public function getRememberTokenName(){ return 'remember_token'; } 

Это избавившись от ошибок, но я до сих пор не могу войти. Я буду использовать правильную информацию, но это, кажется, перенаправить меня обратно на страницу входа в систему. После дальнейших исследований я обнаружил, что мне может понадобиться поле [b] remember_token [/ b] в моей базе данных. Я попытался добавить это и remigrate, добавив:

$table->rememberToken(); 
[edit 2014-09-16, 07:05: added parens. they were in my code but forgotten in the post] 

Но что произвел этот StackTrace:

PHP Fatal error: Call to undefined method Illuminate\Database\Schema\Blueprint::rememberToken() in /vagrant/www/vfamatching.dev/app/database/migrations/2013_11_01_033240_create_users_table.php on line 24 
PHP Stack trace: 
PHP 1. {main}() /vagrant/www/vfamatching.dev/artisan:0 
PHP 2. Symfony\Component\Console\Application->run() /vagrant/www/vfamatching.dev/artisan:59 
PHP 3. Symfony\Component\Console\Application->doRun() /vagrant/www/vfamatching.dev/vendor/symfony/console/Symfony/Component/Console/Application.php:121 
PHP 4. Symfony\Component\Console\Application->doRunCommand() /vagrant/www/vfamatching.dev/vendor/symfony/console/Symfony/Component/Console/Application.php:191 
PHP 5. Illuminate\Console\Command->run() /vagrant/www/vfamatching.dev/vendor/symfony/console/Symfony/Component/Console/Application.php:893 
PHP 6. Symfony\Component\Console\Command\Command->run() /vagrant/www/vfamatching.dev/vendor/laravel/framework/src/Illuminate/Console/Command.php:96 
PHP 7. Illuminate\Console\Command->execute() /vagrant/www/vfamatching.dev/vendor/symfony/console/Symfony/Component/Console/Command/Command.php:244 
PHP 8. Illuminate\Database\Console\Migrations\MigrateCommand->fire() /vagrant/www/vfamatching.dev/vendor/laravel/framework/src/Illuminate/Console/Command.php:108 
PHP 9. Illuminate\Database\Migrations\Migrator->run() /vagrant/www/vfamatching.dev/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php:67 
PHP 10. Illuminate\Database\Migrations\Migrator->runMigrationList() /vagrant/www/vfamatching.dev/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php:84 
PHP 11. Illuminate\Database\Migrations\Migrator->runUp() /vagrant/www/vfamatching.dev/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php:113 
PHP 12. CreateUsersTable->up() /vagrant/www/vfamatching.dev/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php:137 
PHP 13. Illuminate\Support\Facades\Schema::create() /vagrant/www/vfamatching.dev/app/database/migrations/2013_11_01_033240_create_users_table.php:25 
PHP 14. Illuminate\Support\Facades\Facade::__callStatic() /vagrant/www/vfamatching.dev/app/database/migrations/2013_11_01_033240_create_users_table.php:25 
PHP 15. Illuminate\Database\Schema\Builder->create() /vagrant/www/vfamatching.dev/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:209 
PHP 16. CreateUsersTable->{closure:/vagrant/www/vfamatching.dev/app/database/migrations/2013_11_01_033240_create_users_table.php:15-25}() /vagrant/www/vfamatching.dev/vendor/laravel/framework/src/Illuminate/Database/Schema/Builder.php:91 
{"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","message":"Call to undefined method Illuminate\\Database\\Schema\\Blueprint::rememberToken()","file":"\/vagrant\/www\/vfamatching.dev\/app\/database\/migrations\/2013_11_01_033240_create_users_table.php","line":24}}[email protected]:/vagrant/www/ 

[редактировать 2014-09-16, 07:05: попробовал ответ смотрителя] После ответа смотрителя прошлой ночью я попытался использовать их решение, заменив

$table->rememberToken(); with 
$table->string('remember_token', 100); 

миграция больше не выдает ошибку, но до сих пор висит Войти. Кроме того, я должен отметить, что Laravel рекомендует использовать синтаксис rememberToken

Мой Войти маршрут

Route::get('login', array('as' => 'login', function() { return View::make('login'); }))->before('guest'); 
Route::post('login', '[email protected]'); 

и метод управления

public function login() 
{ 
    $user = array(
     'email' => Input::get('email'), 
     'password' => Input::get('password') 
    ); 
    if (Auth::attempt($user)) { 
     Auth::user()->login(); 
     Auth::user()->lastLogin = Carbon::now(); 
     Auth::user()->save(); 
     if (Session::has('returnUrl')) 
     { 
      $intendedDestination = Session::get('returnUrl'); 
      Session::forget('returnUrl'); 
      return Redirect::to($intendedDestination) 
      ->with('flash_success', 'You are successfully logged in.'); 
     } 
     return Redirect::to('/') 
      ->with('flash_success', 'You are successfully logged in.'); 
    } 
    // authentication failure! lets go back to the login page 
    return Redirect::route('login') 
     ->with('flash_error', 'Your username/password combination was incorrect.') 
     ->withInput(); 
} 

ответ

2

'remember_token' просто varchar поле и должны быть созданы, как и любой другой при миграции:

$table->string('remember_token', 100)->nullable(); 

Update

В ответ на ваш комментарий, вы правильно, строитель документации схема действительно позволяет метод rememberToken, это интересно, что upgrade guide не упоминает о нем. Он доступен только в Laravel v4.2 и выше и, как это письмо, это не более чем псевдоним для приведенного выше кода:

// File: /vendor/laravel/framework/src/Illuminate/Database/Schema/Blueprint.php 
/** 
* Adds the `remember_token` column to the table. 
* 
* @return \Illuminate\Support\Fluent 
*/ 
public function rememberToken() 
{ 
    return $this->string('remember_token', 100)->nullable(); 
} 

Если вы на 4.2 или вверх, я бы использовать функцию rememberToken а не функцию string для определения столбца, на всякий случай, если определение функции выше в любых будущих версиях.

Что касается вашей попытки входа в систему «подвешивать», пожалуйста, обновите свой вопрос с помощью соответствующего метода контроллера, и я могу, возможно, помочь вам дальше.

+0

Миграция больше не выдает ошибку, но до сих пор висит Войти.Кроме того, я должен указать, что Laravel рекомендует использовать синтаксис 'rememberToken' – merlinpatt

+0

Если у вас есть прямой доступ к таблице, вы можете попытаться выполнить регистрацию' $ value' и сохранить столбец 'remember_token' для пользователя после попытки регистрации in. –

+0

Итак, я обнаружил, что метод rememberToken предназначен только для 4.2 и выше, что их документы не делают очень ясным. (Источник: http://stackoverflow.com/questions/23242533/laravel-redirect-with-logout-not-working) – merlinpatt

0

Может быть, это не просто маленькая ошибка, rememberToken способ и должен называться так:

$table->rememberToken(); 
+0

Моя ошибка. Мой код имел parens, но мой пост не – merlinpatt

 Смежные вопросы

  • Нет связанных вопросов^_^