尝试在我的Laravel应用中集成Google登录时遇到此错误:
找不到类'App \ Http \ Controllers \ Auth \ User'
namespace App\Http\Controllers\Auth;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class SocialiteController extends Controller
{
public function __construct()
{
$this->middleware('guest')->except('logout');
}
public function redirectToGoogle()
{
return \Socialite::driver('google')->redirect();
}
public function handleGoogleCallback(Request $request)
{
$googleUser = \Socialite::driver('google')->stateless()->user();
$user = \User::whereGoogleId($googleUser->id)->first();
if ($user) {
Auth::login($user);
return LoginController::authenticated($request, $user);
} else {
list($first_name, $last_name) = explode(' ', $googleUser->name);
// signup
$input = [
'first_name' => $first_name,
'last_name' => $last_name,
'email' => $googleUser->email,
];
$request->session()->flash('google_token', $googleUser->accessToken);
return RegisterController::showRegistrationForm()->withInput($input)->with;
}
}
另外,我不知道USER的完整名称空间 我是新来的。
如果您能提供有效的教程,我将不胜感激。 您能给我建议解决方案吗?
答案 0 :(得分:0)
如果您打算使用Laravel提供的默认 User
模型,则User
类应存储在/app
目录中(请首先检查它)。
鉴于您的用户模型位于app/Model
目录中,请像这样更新代码:
namespace App\Http\Controllers\Auth;
// some imports..
use App\Model\User; // <------
class SocialiteController extends Controller
{
// some code..
public function handleGoogleCallback(Request $request)
{
// more code..
$user = User::whereGoogleId($googleUser->id)->first();
// ^^^^
// ...
}
}
注意:显示以下错误:
400错误的请求响应:
{ "error": "invalid_grant", "error_description": "Bad Request" }
这与您的Google应用程序密钥有关。这是另一个问题的一部分。
答案 1 :(得分:0)
如果User
模型文件位于名为 Model 的文件夹下,则必须调用User
类的完全限定名称或添加一个use
对您的代码的声明,即:
$user = \Model\User::whereGoogleId($googleUser->id)->first();
// or this solution
use \Model\User;
....
$user = User::whereGoogleId($googleUser->id)->first();