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

Posted

技术标签:

【中文标题】如何在 laravel 中执行“记住我”登录选项?【英文标题】:how to do "remember me" login option in laravel? 【发布时间】:2014-06-10 07:11:08 【问题描述】:

所以我正在做的是当我选中 记住我 复选框时,用户在注销表单(用户名和密码)时记住这样的用户数据:

所以这是我的代码,它不起作用:(

// create our user data for the authentication
        $userdata = array(
                'email'     => Input::get('email'),
                'password'  => Input::get('password')
        );

        // attempt to do the login
        if (Auth::attempt($userdata, true)) 

            Session::flash('message', array('body'=>trans('login-signup.welcome'), 'type'=>'success'));
            return Redirect::to('/');

    

【问题讨论】:

使用 Auth - 你确定表 users 有一个用于令牌的“remember_me”列吗? 【参考方案1】:

使用 Cookie

cookie 是从网站发送的一小段数据,并在用户浏览该网站时存储在用户的网络浏览器中。每次用户加载网站时,浏览器都会将cookie发送回服务器,以通知网站用户之前的活动

创建:

$response->withCookie(Cookie::make('name', 'value', $minutes));

检索

$value = Cookie::get('name');

您的问题是不要记住用户登录。问题是如何根据保存的身份验证信息填写输入。如果在加载页面时在输入值属性中打印身份验证值,则可以这样做。

larval Cookies Docs

Laravel 也有自己的“记住我”的实现

if (Auth::attempt(array('email' => $email, 'password' => $password), true))

// The user is being remembered...


if (Auth::viaRemember())

//

更多关于"Authenticating A User And "Remembering" Them"的信息

【讨论】:

【参考方案2】:
public function validate() 

    // set the remember me cookie if the user check the box
    $remember = (Input::has('remember')) ? true : false;

    // attempt to do the login
    $auth = Auth::attempt(
        [
            'username'  => strtolower(Input::get('username')),
            'password'  => Input::get('password')    
        ], $remember
    );
    if ($ auth) 
        return Redirect::to('home');
     else 
        // validation not successful, send back to form 
        return Redirect::to('/')
            ->with Input(Input::except('password'))
            ->with('flash_notice', 'Your username/password combination was incorrect.');
    


【讨论】:

【参考方案3】:
$remember = true;
Auth::login($user, $remember);

【讨论】:

【参考方案4】:

您可以通过设置 Cookie 记住登录信息。 cookie 将存储在浏览器存储中。它是从网站发送的一小段数据,并在用户浏览特定网站时存储在用户的网络浏览器中。每次用户加载网站时,浏览器都会将 cookie 发送回服务器,以通知网站用户之前的活动。在 Laravel 中,您可以将 cookie 设置为,

$response->withCookie(Cookie::make('COOKIE_NAME', 'COOKIE_VALUE', $minutes));
//or
back()->->withCookie(Cookie::make('COOKIE_NAME', 'COOKIE_VALUE', $minutes))

如果你想从中间件设置cookie,这里是方法

public function handle($request, Closure $next)
    $response = $next($request);
    $response->withCookie(Cookie::make('COOKIE_NAME', 'COOKIE_VALUE', $minutes))

您可以通过 Illuminate\Support\Facades\Cookie 类创建/检索 cookie,也可以使用 laravel 的全局 cookie() 辅助函数。

要检索 cookie,

$value = Cookie::get('COOKIE_NAME');
//or
$request->cookie('COOKIE_NAME')

请记住,Laravel 默认加密 cookie。中间件 EncryptCookies 负责加密 cookie。在检索此类 cookie 时,您将收到 null。禁用/删除 EncryptCookies 中间件不是解决方案。

您可以按照以下方式对 cookie 进行加密,

protected $except = [
    'COOKIE_NAME',
];

【讨论】:

以上是关于如何在 laravel 中执行“记住我”登录选项?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.3记住我身份验证问题

Laravel 5.3记住我身份验证问题

Laravel 登录会话

Laravel/Vue - JWT 令牌记住我

在 Laravel 4 中使用 Sentry 的记住我功能

即使没有检查,请记住我在 laravel auth 中的工作