首页 文章

laravel中的Auth :: login($ user)无法登录用户

提问于
浏览
0

我正在使用 laravel 5.4Auth::login($user) 显示类型错误:

传递给Illuminate \ Auth \ SessionGuard :: login()的参数1必须实现接口Illuminate \ Contracts \ Auth \ Authenticatable,给出的Illuminate \ Database \ Eloquent \ Builder实例,在/ home / vendor / laravel / framework / src /中调用第294行的Illuminate / Auth / AuthManager.php

我的User.php文件是:

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = [
    'name', 'email', 'role', 'password',
];

/**
 * The attributes that should be hidden for arrays.
 *
 * @var array
 */
protected $hidden = [
    'password', 'remember_token',
];
}

我的AuthController.php是:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;
use Auth;
use Illuminate\Support\Facades\Input;
use \Hash;

class AuthController extends Controller
{
//
public function register(Request $request){
    $this->validate($request, [
        'name' => 'required|max:30',
        'email' => 'required|email|unique:users',
        'regpassword' => 'required|alpha_num|confirmed'
        ]);

    /*$user = new User();
    $user['name'] = $request['name'];
    $user['email'] = $request['email'];
    $user['password'] = bcrypt($request['password']);
    $user['role'] = 'user';
    $user->save();
    */
    $user = User::create(array(
        'email' => Input::get('email'),
        'name' => Input::get('name'),
        'password' => Hash::make(Input::get('password')),
        'role' => 'user'));
    return 'success';


 }

public function userLogin(Request $request){
    $this->validate($request,[
        'email' => 'required|email',
        'password' => 'required' 
        ]);

    $user = User::where('email', '=', $request['email'])-> where('password' ,'=', Hash::make($request['password']))->where('role','=','user');                                                    

    if($user){
        Auth::login($user); 
        return $next($request);
    }
    else{
        return redirect()->back();
    }


}
}

我的web.php

Route::get('/', function () {
return view('welcome');
});

Auth::routes();

Route::get('/home', 'HomeController@index');
Route::post('/register', 'AuthController@register');
Route::post('/UserLogin','AuthController@userLogin');

3 回答

  • 1

    你的问题是这样的:

    $user = User::where('email', '=', $request['email'])-> where('password' ,'=', Hash::make($request['password']))->where('role','=','user');
    

    缺少从查询中获取结果集的调用 . 添加 ->first() .

    它的意思是:

    您给了我一个查询构建器的实例

    我想要一个扩展可验证类的模型

    如果你打开 App\User ,你会发现它确实扩展了这个类:

    class User extends Authenticatable {
    
  • 0

    这个:

    $user = User::where('email', '=', $request['email'])-> where('password' ,'=', Hash::make($request['password']))->where('role','=','user');
    

    不是你获得用户的方式 .

    代替

    $user = User::where('email', '=', $request['email'])-> where('password' ,'=', Hash::make($request['password']))->where('role','=','user');                                                    
    
    if($user){
        Auth::login($user); 
        return $next($request);
    }
    else{
        return redirect()->back();
    }
    

    你可以使用:

    $logged = auth()->attempt(
              ['email' => $request['email'], 
               'password' => $request['password'], 
               'role' => 'user']);
    
        if($logged) {
            return $next($request); // probably it won't work. This is fine in middleware but not in controller
        }
        else{
            return redirect()->back();
        }
    
  • 0

    解决了我的问题如下:

    $user = User::where('email', '=' $request['email'])->where('role','=','user')->first();
    if(Hash::check($request['password'],$user->password)){
        Auth::login($user);
        return  'success';
    }
    

相关问题