gpt4 book ai didi

php - Eloquent-oauth-捕获PDO异常

转载 作者:行者123 更新时间:2023-12-03 08:54:12 26 4
gpt4 key购买 nike

尽管此问题与特定软件包有关,但它应与其他软件包有关,因为它实际上与Laravel框架中的正确位置有关以解决以下情况。

我正在使用eloquent-oauth启用通过linkedin和Facebook登录到我的应用程序。

授权和登录都可以单独正常工作。

但是,如果我之前已经通过一个社交平台进行了授权和登录,然后尝试通过另一个社交平台进行了授权,则会收到一个PDO异常,该异常是由于用户表上的唯一电子邮件约束而导致插入失败。

我应该在哪里捕获该插入?

我可以看到我可以直接将代码添加到vendor文件夹中,但是不认为这是一个好习惯,因为如果将来在某个时候升级软件包,那肯定会被覆盖吗?

我目前正在做的是将用户检查添加到登录功能中的vendor/adamwathan/eloquent-oauth/src/OAuthManager.php文件中

public function login($providerAlias, Closure $callback = null)
{
if (! $this->stateManager->verifyState())
{
throw new InvalidAuthorizationCodeException;
}
$details = $this->getProvider($providerAlias)->getUserDetails();

//start of existing user check
$thisUser = User::where('email', $details->email)->first();
if ($thisUser !== null)
{
$autoOpenModalLogin = true; //instruct the page to open the login modal
return redirect()->guest('home')->with('$autoOpenModalLogin', $autoOpenModalLogin);
}
//end of existing user check
return $this->authenticator->login($providerAlias, $details, $callback);
}

我认为将其添加到某处的路由中可能会更好-但我似乎无法捕获该错误。我还需要在下面添加其他内容来捕获PDO错误吗?
Route::get('{provider}/login', function ($provider) {
try {
OAuth::login($provider, function ($user, $userDetails) {
$user->email = $userDetails->email;
$user->name = $userDetails->firstName . ' ' . $userDetails->lastName;
$user->first_name = $userDetails->firstName;
$user->last_name = $userDetails->lastName;
$user->save();
});
return view('home');
} catch (ApplicationRejectedException $e) {
// User rejected application
} catch (InvalidAuthorizationCodeException $e) {
// Authorization was attempted with invalid
// code,likely forgery attempt
}
});

我想如果我将其保留为插入的用户 checkin 供应商文件,如果我更新了软件包,我只需要更新那些文件即可?

但是有比我做的更好的方法吗?

最佳答案

好的,所以我添加了一个PDOexception的功能,这似乎正是我所需要的!将首先检查它,然后在此处确认。

Route::get('{provider}/login', function ($provider) {
try {
OAuth::login($provider, function ($user, $userDetails) {
$user->email = $userDetails->email;
$user->name = $userDetails->firstName . ' ' . $userDetails->lastName;
$user->first_name = $userDetails->firstName;
$user->last_name = $userDetails->lastName;
$user->save();
});
return view('home');
} catch (ApplicationRejectedException $e) {
// User rejected application
} catch (InvalidAuthorizationCodeException $e) {
// Authorization was attempted with invalid
// code,likely forgery attempt
}

catch(PDOException $e){
$autoOpenModalLogin = true;
return redirect()->guest('home')->with('$autoOpenModalLogin', $autoOpenModalLogin);
}
});

关于php - Eloquent-oauth-捕获PDO异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31666038/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com