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/ &amp;&amp; php composer.phar install)。请注意,beta 目前不适用于上述用户模型,因为自 BETA1 发布以来,RemindableTrait 实际上已被移动;所以我推荐dev 分支,直到4.2.0-BETA2 发布。 另请注意,目前有laravel/framework4.2.0-BETA1 版本,但没有laravel/laravel4.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 并记住我更新的主要内容,如果未能解决你的问题,请参考以下文章

使用记住令牌的 Laravel 登录/用户问题

Laravel 4记住我过期时间

Laravel/Vue - JWT 令牌记住我

Laravel 5.3记住我身份验证问题

Laravel 5.3记住我身份验证问题

如何在 laravel 中执行“记住我”登录选项?