如何在 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 中执行“记住我”登录选项?的主要内容,如果未能解决你的问题,请参考以下文章