我有一个带有Socialite的Laravel 5网络应用程序,可以通过Facebook帐户登录我的用户.
这是我的回调函数:
public function callback(SocialAccountService $service)
{
$user = $service->createOrGetUser(Socialite::driver('facebook')->user());
auth()->login($user);
return redirect()->to('/home');
}
Run Code Online (Sandbox Code Playgroud)
这是我的SocialAccountService,基本上该函数返回用户,如果存在或创建一个新用户:
class SocialAccountService
{
public function createOrGetUser(ProviderUser $providerUser)
{
$account = SocialAccount::whereProvider('facebook')
->whereProviderUserId($providerUser->getId())
->first();
if ($account) {
return $account->user;
} else {
$account = new SocialAccount([
'provider_user_id' => $providerUser->getId(),
'provider' => 'facebook'
]);
$user = User::whereEmail($providerUser->getEmail())->first();
if (!$user) {
$user = User::create([
'email' => $providerUser->getEmail(),
'name' => $providerUser->getName(),
]);
}
$account->user()->associate($user);
$account->save();
return $user;
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,我能够通过Facebook成功登录我的用户,但当用户点击FB对话框上的取消获取权限时,它会中断.
我该如何处理这个错误?我可以在URL框中看到错误消息,但不知道处理它们.
PS我对Laravel和Socialite来说相当新
我有一个有两行的函数,我希望它们按顺序执行.功能是:
showNotification(message){
$("#notificationMessageBody").html(message); // line1
$("#notificationModal").modal('show'); //line2
}
Run Code Online (Sandbox Code Playgroud)
所以,每当我打电话给我showNotification("Hello World!")
如何确保line1
之前执行line2
(意味着内容加载在模态触发之前完成)基本上,我试图在模态体中填写我的消息然后显示它,而不是在填充之前.
- 编辑 -
这些函数确实是一个接一个地执行,但我的模态在jQuery加载message
到我的之前弹出#notificationMessageBody
结果,例如:如果我打电话给showNotification("Hello")
我得到一个带有"你好"的模态(模态和东西的安排已完成),但之后如果我调用showNotification("World")
模态首先出现"Hello",那么之后它会变为"世界".
注意:"你好"和"世界"是很大的文本垃圾,所以把它加载到我的DIV中必须花一些时间,我相信.即使它们被一个接一个地执行,但似乎(对于普通者)首先是模态弹出然后替换完成.我希望现在的情况有点清晰.
这个功能周围的任何地方都没有涉及AJAX.基本上,这是我可以说的自定义alert()函数.我的页面中有一个带有正确ID的模态.我改变了模态体内容(使用jQuery的.html()
函数)并触发模式显示,如代码所示.