Laravel 手动登录功能
Laravel manual login function
我在Laravel 5.5中使用手动登录功能。卡在登录中。并检查所有(5 个相关)堆栈链接,但没有找到任何线索。
Achievement is once user get registered, automatically sign in that user.
错误是
"Type error: Argument 1 passed to Illuminate\Auth\SessionGuard::login() must implement interface Illuminate\Contracts\Auth\Authenticatable, string given, called in Server/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php on line 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);
我做错了什么吗?请指导我。
登录函数需要类型为 Authenticatable
的用户,而您刚刚给出了 email
字符串,这就是您收到此错误的原因,要么使用 Auth::loginUsingId($id);
$user = User::where('email','=',$email)->first();
Auth::loginUsingId($user->id, TRUE);
或者只是
Auth::login($user);
Auth::login()
函数需要一个 Authenticable 对象。如果你没有弄乱 User
class,这将是你需要传入的内容。
Auth::login($user, true);
参考:https://laravel.com/api/5.5/Illuminate/Auth/SessionGuard.html#method_login
你需要像这样pass/return$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);
只需使用 Auth::login($userMail, TRUE);
而不是 Auth::login($userMail->email, TRUE);
更多信息请查看:https://laravel.com/api/5.5/Illuminate/Auth/SessionGuard.html#method_login
$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
中像这样手动登录
Instead of this
Auth::login($userMail->email, TRUE);
Use this
Auth::login($user->id, TRUE);
对于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') 以外的其他模型 class,则 -> 导航至 config/auth.php 并编辑此
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
到
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Staff::class,
],
注意:我已将 User 替换为我的模型 class Staff.
最后转到您的模型 class,而不是扩展模型,而是扩展用户。即
来自
class Staff extends Model
{
到
class Staff extends \Illuminate\Foundation\Auth\User
{
就是这样。
根据doc,您可能需要在手动登录用户后重新生成会话:
$user = User::firstOrCreate([
// ...
], [
// ...
]);
Auth::login($user);
$request->session()->regenerate();
return redirect()->route('dashboard');
我在Laravel 5.5中使用手动登录功能。卡在登录中。并检查所有(5 个相关)堆栈链接,但没有找到任何线索。
Achievement is once user get registered, automatically sign in that user.
错误是
"Type error: Argument 1 passed to Illuminate\Auth\SessionGuard::login() must implement interface Illuminate\Contracts\Auth\Authenticatable, string given, called in Server/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php on line 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);
我做错了什么吗?请指导我。
登录函数需要类型为 Authenticatable
的用户,而您刚刚给出了 email
字符串,这就是您收到此错误的原因,要么使用 Auth::loginUsingId($id);
$user = User::where('email','=',$email)->first();
Auth::loginUsingId($user->id, TRUE);
或者只是
Auth::login($user);
Auth::login()
函数需要一个 Authenticable 对象。如果你没有弄乱 User
class,这将是你需要传入的内容。
Auth::login($user, true);
参考:https://laravel.com/api/5.5/Illuminate/Auth/SessionGuard.html#method_login
你需要像这样pass/return$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);
只需使用 Auth::login($userMail, TRUE);
而不是 Auth::login($userMail->email, TRUE);
更多信息请查看:https://laravel.com/api/5.5/Illuminate/Auth/SessionGuard.html#method_login
$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
中像这样手动登录Instead of this
Auth::login($userMail->email, TRUE);
Use this
Auth::login($user->id, TRUE);
对于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') 以外的其他模型 class,则 -> 导航至 config/auth.php 并编辑此
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
到
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Staff::class,
],
注意:我已将 User 替换为我的模型 class Staff.
最后转到您的模型 class,而不是扩展模型,而是扩展用户。即
来自
class Staff extends Model
{
到
class Staff extends \Illuminate\Foundation\Auth\User
{
就是这样。
根据doc,您可能需要在手动登录用户后重新生成会话:
$user = User::firstOrCreate([
// ...
], [
// ...
]);
Auth::login($user);
$request->session()->regenerate();
return redirect()->route('dashboard');