繁体   English   中英

laravel 4.2,记得我更新

[英]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/framework4.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('/');
        }
    }

}

只需在此线程末尾检查我的答案即可!

http://laravel.io/forum/04-21-2014-remember-token

如果查看Guard.php文件,则缺少重新生成令牌功能。

我正在使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM