我在 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);
我做错了什么吗?请指导我。
登录功能需要类型为
Authenticatable
的用户,而您刚刚给出了email
,这是字符串,这就是您收到此错误的原因,要么使用Auth::loginUsingId($id);
$user = User::where('email','=',$email)->first();
Auth::loginUsingId($user->id, TRUE);
或者只是
Auth::login($user);
而不是这个
Auth::login($userMail->email, TRUE);
用这个
Auth::login($user->id, TRUE);
$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 中像这样手动登录
Auth::login()
函数需要一个Authenticable对象。如果你没有弄乱 User
类,这将是你需要传入的。
Auth::login($user, true);
参考:https://laravel.com/api/5.5/Illuminate/Auth/SessionGuard.html#method_login
只需使用
Auth::login($userMail, TRUE);
代替 Auth::login($userMail->email, TRUE);
有关更多信息,请检查:https://laravel.com/api/5.5/Illuminate/Auth/SessionGuard.html#method_login
对于 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
{
就是这样。
您需要像这样传递/返回
$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);
根据doc,手动登录用户后可能需要重新生成会话:
$user = User::firstOrCreate([
// ...
], [
// ...
]);
Auth::login($user);
$request->session()->regenerate();
return redirect()->route('dashboard');
如果您根本不使用 remember me 功能,或者您的 users 表没有 remember_token,请不要忘记将其设置为 false:
Auth::loginUsingId($userId, false);
或在:
Auth::login($userObject, false);
所有答案都没有提到Auth Class位于哪里!我们首先需要使用Auth类
use Illuminate\Support\Facades\Auth;
现在我们有两种方法。
第一个使用 用户 ID 作为整数
Auth::loginUsingId($user_id, false);
第二个是使用用户对象(用户模型)
Auth::login($userObject, false);
{
$validator = Validator::make($request->all(), [
'email' => 'required|email|exists:users',
'password' => 'required',
]);
if ($validator->fails()) {
return response()->json(['success' => false, "error" => $this->validationMessage($validator->errors()->toArray())], 422);
}
if (Auth::attempt($request->all())) {
// successfull authentication
$user = User::find(Auth::user()->id);
return response()->json([
'token' => $user->createToken('appToken')->accessToken,
'user' => new UserResource($user),
], 200);
} else {
// failure to authenticate
return response()->json([
'error' => 'Invalid Email or Password.',
'status' => false,
], 401);
}
}