[英]laravel 4.2 and remember me update
我将getRememberToken,setRememberToken,getRememberTokenName添加到用户模型,将“ remember_token”列添加到用户DB,运行composer更新。
结果:没有错误,使用“记住我”选项登录与以前相同-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';
}
}
这是我的Laravel开发人员的User
模型:
<?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
您需要为dev
设置minimum-stability
,然后对php composer.phar update
(或者,如果像我经常遇到的那样遇到内存错误,请使用rm -rf vendor/ && php composer.phar install
)。 请注意,目前beta
不适用于上述用户模型,因为RemindableTrait
实际上是自BETA1
版本以来被移动的; 所以我建议在4.2.0-BETA2
发行之前使用dev
分支。 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('/');
}
}
}
我正在使用Laravel 4.2; 我的登录视图上输入的name="rememberme"
,在控制器中带有以下代码:
if(Auth::attempt($logindata, Input::has('rememberme')))
{
return Redirect::intended('/');
}
效果很好; 一旦登录,会话就不会结束,除非我明确注销。
Laravel 4.2记住我的步骤:
1-用于检查登录的主要用户表必须在架构中具有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)
这行代码应该适合记住我
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.