Laravel 手动登录功能
Posted
技术标签:
【中文标题】Laravel 手动登录功能【英文标题】:Laravel manual login function 【发布时间】:2018-03-03 21:39:43 【问题描述】:我在 Laravel 5.5 中使用手动登录功能。卡在登录中。并检查所有(5 个相关的)堆栈链接,并没有找到任何线索。
成就是一旦用户注册,自动登录该用户。
错误是
"类型错误:传递给 Illuminate\Auth\SessionGuard::login() 的参数 1 必须实现接口 Illuminate\Contracts\Auth\Authenticatable,给定字符串,在 Server/vendor/laravel/framework/src/Illuminate/Auth 中调用/AuthManager.php 在第 294 行◀"
if ($validator->fails())
// $messages = $validator->messages();
return Redirect::to('register')
->withErrors($validator)
->withInput();
else
$email = Input::get('email');
$user = new user;
$user->name = Input::get('name');
$user->email = Input::get('email');
$user->password = Hash::make(Input::get('password'));
$user->save();
// $userMail = $user->find($email);
$userMail = User::where('email','=',$email)->first();
Auth::login($userMail->email, TRUE);
我做错了什么吗?请指导我。
【问题讨论】:
【参考方案1】:登录功能需要Authenticatable
类型的用户,而您刚刚给出email
这是字符串,这就是您收到此错误的原因,请使用Auth::loginUsingId($id);
$user = User::where('email','=',$email)->first();
Auth::loginUsingId($user->id, TRUE);
或者只是
Auth::login($user);
【讨论】:
如何查看经过身份验证的用户详细信息? @StackUser : 要获取用户详细信息,请使用\Auth::user();
你没有检查密码
亲爱的@AmiroucheZeggagh,此答案适用于不需要密码的Auto Login
。请阅读Auto login in laravel
【参考方案2】:
Auth::login()
函数需要一个 Authenticable 对象。如果你还没有弄乱User
类,这将是你需要传入的。
Auth::login($user, true);
参考:https://laravel.com/api/5.5/Illuminate/Auth/SessionGuard.html#method_login
【讨论】:
【参考方案3】:您需要像这样传递/返回$user
if ($validator->fails())
// $messages = $validator->messages();
return Redirect::to('register')
->withErrors($validator)
->withInput();
else
$email = Input::get('email');
$user = new user;
$user->name = Input::get('name');
$user->email = Input::get('email');
$user->password = Hash::make(Input::get('password'));
$user->save();
//
Auth::login($user);
或
Auth::loginUsingId($user->id, TRUE);
【讨论】:
【参考方案4】:只需使用Auth::login($userMail, TRUE);
而不是Auth::login($userMail->email, TRUE);
更多信息请查看:https://laravel.com/api/5.5/Illuminate/Auth/SessionGuard.html#method_login
【讨论】:
【参考方案5】:$email = $request->email;
$password = md5($request->password);
if ($request->remember_me == 1)
$cookie = Cookie::queue('username', $email, time() + 31536000);
else
$cookie = Cookie::queue('username', '', time() - 100);
$user = DB::table('tbl_adminuser')->where('email_address', $email)->where('password', $password)->first();
$request->session()->put('userData', $user);
=> 你可以在 laravel 中像这样手动登录
【讨论】:
您永远不应该使用 md5 作为密码。而是使用内置的密码哈希函数:laravel.com/docs/7.x/hashing【参考方案6】:不是这个
Auth::login($userMail->email, TRUE);
使用这个
Auth::login($user->id, TRUE);
【讨论】:
【参考方案7】:对于 Laravel 7。
手动登录 使用此方法登录。
public function check_login(Request $request)
$credentials = $request->only('username', 'password');
if (Auth::attempt($credentials))
return redirect('/dashboard');
else
return redirect('/login')->with('error', 'Invalid Email address or Password');
如果您使用的模型类不是默认的('User'),那么 -> 导航到 config/auth.php 并编辑它
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
到
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Staff::class,
],
注意:我已将 User 替换为我的模型类 Staff。
最后转到您的模型类,而不是扩展模型,而是扩展用户。即
来自
class Staff extends Model
到
class Staff extends \Illuminate\Foundation\Auth\User
就是这样。
【讨论】:
【参考方案8】:根据doc,手动登录用户后可能需要重新生成会话:
$user = User::firstOrCreate([
// ...
], [
// ...
]);
Auth::login($user);
$request->session()->regenerate();
return redirect()->route('dashboard');
【讨论】:
以上是关于Laravel 手动登录功能的主要内容,如果未能解决你的问题,请参考以下文章