laravel 4.2 并记住我更新
Posted
技术标签:
【中文标题】laravel 4.2 并记住我更新【英文标题】:laravel 4.2 and remember me update 【发布时间】:2014-06-01 19:36:28 【问题描述】:我将getRememberToken、setRememberToken、getRememberTokenName添加到用户模型,将“remember_token”列添加到用户数据库,运行composer update。
结果:没有错误,使用记住我选项登录与以前一样 - DB 中的“remember_token”仍然为空。
+ 我在Illuminate\Auth\UserProviderInterface
中看不到retrieveByToken()
和updateRememberToken()
出了什么问题?
我做了还是没做某事?出于某种原因,作曲家没有像它应该的那样使用 "laravel/framework": "4.2.*" 吗? v4.2 没有修复记住我的问题? Auth::attempt()
应该以某种方式修改以生成数据并将其放入remember_token? Auth::logout()
不碰remember_token(我放了随机数据,注销并登录后它仍然相同,无论是否记住我)
在哪里挖?
<?php
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;
class User extends Eloquent implements UserInterface, RemindableInterface
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
protected $fillable = ['name','email','password','temp_password','code','status', 'remember_token'];
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = array('password');
/**
* Get the unique identifier for the user.
*
* @return mixed
*/
public function getAuthIdentifier()
return $this->getKey();
/**
* Get the password for the user.
*
* @return string
*/
public function getAuthPassword()
return $this->password;
/**
* Get the e-mail address where password reminders are sent.
*
* @return string
*/
public function getReminderEmail()
return $this->email;
public function scopeCode($query, $code)
return $query->whereCode($code);
public function scopeEmail($query, $email)
return $query->whereEmail($email);
public function getRememberToken()
return $this->remember_token;
public function setRememberToken($value)
$this->remember_token = $value;
public function getRememberTokenName()
return 'remember_token';
【问题讨论】:
您的 User 模型是否直接扩展了 Eloquent 类?您可以发布您的完整用户模型代码吗? 已添加。那么在作曲家更新后没有 retrieveByToken() 和 updateRememberToken() 的 Illuminate\Auth\UserProviderInterface 呢?为什么它不自动出现? 您的模型看起来不错。我以前没有注意到这一点,但是 Laravel 4.2 还没有发布,你应该将 composer.json 更改为“laravel/framework”:“4.1.*”,然后运行“composer update” 是的,在浏览器降级修复问题中删除cookies后。好吧,它接缝我不会再玩开发版了:) tnx 【参考方案1】:这是我的 User
Laravel 开发模型:
<?php
use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;
class User extends Eloquent implements UserInterface, RemindableInterface
use UserTrait, RemindableTrait;
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = array('password');
protected $fillable = array('email', 'password');
这里有很多注意事项:
特性!您的五个方法确实应该来自UserTrait
,另一个来自RemindableTrait
。
在composer.json
中,您需要将minimum-stability
设置为dev
,然后设置php composer.phar update
(或者,如果您遇到像我经常遇到的内存错误,rm -rf vendor/ && php composer.phar install
)。请注意,beta
目前不适用于上述用户模型,因为自 BETA1
发布以来,RemindableTrait
实际上已被移动;所以我推荐dev
分支,直到4.2.0-BETA2
发布。
另请注意,目前有laravel/framework
的4.2.0-BETA1
版本,但没有laravel/laravel
的4.2.*
版本。因此,如果您尝试(就像我在很长一段时间内徒劳无功)create-project laravel/laravel --stability=beta
,那么您现在将继续获得4.1.*
,即使 4.2 测试版已经发布。这一切都非常令人困惑。
最后,不要忘记您的用户架构(存根php artisan auth:reminders-table
):
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
/**
* Run the migrations.
*
* @return void
*/
public function up()
Schema::create('users', function(Blueprint $table)
$table->increments('id');
$table->string('email')->unique();
$table->string('password');
$table->string('remember_token', 100)->nullable();
$table->timestamps();
$table->softDeletes();
);
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
Schema::drop('users');
还有你的提醒控制器(存根php artisan auth:reminders-controller
):
<?php
class RemindersController extends Controller
/**
* Display the password reminder view.
*
* @return Response
*/
public function getRemind()
return View::make('password.remind');
/**
* Handle a POST request to remind a user of their password.
*
* @return Response
*/
public function postRemind()
switch ($response = Password::remind(Input::only('email')))
case Password::INVALID_USER:
return Redirect::back()->with('error', Lang::get($response));
case Password::REMINDER_SENT:
return Redirect::back()->with('status', Lang::get($response));
/**
* Display the password reset view for the given token.
*
* @param string $token
* @return Response
*/
public function getReset($token = null)
if (is_null($token)) App::abort(404);
return View::make('password.reset')->with('token', $token);
/**
* Handle a POST request to reset a user's password.
*
* @return Response
*/
public function postReset()
$credentials = Input::only(
'email', 'password', 'password_confirmation', 'token'
);
$response = Password::reset($credentials, function($user, $password)
$user->password = Hash::make($password);
$user->save();
);
switch ($response)
case Password::INVALID_PASSWORD:
case Password::INVALID_TOKEN:
case Password::INVALID_USER:
return Redirect::back()->with('error', Lang::get($response));
case Password::PASSWORD_RESET:
return Redirect::to('/');
【讨论】:
【参考方案2】:请在本帖末尾查看我的答案!
http://laravel.io/forum/04-21-2014-remember-token.
如果您查看 Guard.php 文件,则缺少 regenerating-token 功能。
【讨论】:
【参考方案3】:Laravel 4.2 记住我的步骤:
1- 用于检查登录的主用户表必须在 schema 中有 rememberToken()
Schema::create('Users',function($table)
$table->increments('id');
$table->string('email');
$table->string('password');
$table->bigInteger('organizer_id');
$table->boolean('status');
$table->rememberToken();
$table->timestamps();
$table->softDeletes();
);
2- 视图:记住我的复选框,就像我有
Form::label('remember','Remember Me')
3- 登录控制器:
if (\Auth::attempt(array('email'=>Input::get('email'), 'password'=>Input::get('password') ), (Input::get('remember')==1 ? true : false)))
return Redirect::to('_admin/home')->with('message', 'You are now logged in!');
else
return \Redirect::back()
->with('message', 'Your username/password combination was incorrect')
->withInput();
(Input::get('remember')==1 ? true : false)
这行代码应该可以记住我
【讨论】:
【参考方案4】:我正在使用 Laravel 4.2;我在我的登录视图中输入了name="rememberme"
,并在我的控制器中使用以下代码:
if(Auth::attempt($logindata, Input::has('rememberme')))
return Redirect::intended('/');
效果很好;一旦我登录,我的会话在我明确退出之前不会结束。
【讨论】:
以上是关于laravel 4.2 并记住我更新的主要内容,如果未能解决你的问题,请参考以下文章