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 手动登录功能的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5 - 手动登录没有密码的用户

php 手动登录 - Laravel

如何在 Laravel 中登录用户?

Laravel 7 手动身份验证会话问题

如何在 Laravel 5.2 中手动发送密码重置请求?

Laravel 5 登录功能更改参数