Laravel手动登录功能

问题描述 投票:0回答:11

我在 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);

我做错了什么吗?请指导我。

php laravel authentication laravel-5 laravel-5.5
11个回答
50
投票

登录功能需要类型为

Authenticatable
的用户,而您刚刚给出了
email
,这是字符串,这就是您收到此错误的原因,要么使用
Auth::loginUsingId($id);

 $user = User::where('email','=',$email)->first();
 Auth::loginUsingId($user->id, TRUE);

或者只是

Auth::login($user);

4
投票

而不是这个

Auth::login($userMail->email, TRUE);

用这个

Auth::login($user->id, TRUE);


3
投票
$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 中像这样手动登录


2
投票

Auth::login()
函数需要一个Authenticable对象。如果你没有弄乱
User
类,这将是你需要传入的。

Auth::login($user, true);

参考:https://laravel.com/api/5.5/Illuminate/Auth/SessionGuard.html#method_login


1
投票

只需使用

Auth::login($userMail, TRUE);
代替
Auth::login($userMail->email, TRUE);

有关更多信息,请检查:https://laravel.com/api/5.5/Illuminate/Auth/SessionGuard.html#method_login


1
投票

对于 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
{

就是这样。


0
投票

您需要像这样传递/返回

$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);

0
投票

根据doc,手动登录用户后可能需要重新生成会话:

        $user = User::firstOrCreate([
            // ...
        ], [
            // ...
        ]);

        Auth::login($user);
        $request->session()->regenerate();

        return redirect()->route('dashboard');

0
投票

如果您根本不使用 remember me 功能,或者您的 users 表没有 remember_token,请不要忘记将其设置为 false

Auth::loginUsingId($userId, false);

或在:

Auth::login($userObject, false);

0
投票

所有答案都没有提到Auth Class位于哪里!我们首先需要使用Auth类

use Illuminate\Support\Facades\Auth;

现在我们有两种方法。

第一个使用 用户 ID 作为整数

Auth::loginUsingId($user_id, false);

第二个是使用用户对象(用户模型)

Auth::login($userObject, false);

0
投票
 {
        $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);
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.