laravel 社交名流不使用 JWT 身份验证
laravel socialite not working with JWT auth
我正在与社交名流和 jwt auth 合作,这是我的代码
class SocialAuthFacebookController extends Controller
{
/**
* Create a redirect method to facebook api.
*
* @return void
*/
public function redirect()
{
$provider = 'facebook';
try {
$socialite = Socialite::driver($provider)->redirect();
} catch (InvalidStateException $e) {
$socialite = Socialite::driver($provider)->stateless()->redirect();
}
return $socialite;
}
/**
* Return a callback method from facebook api.
*
* @return callback URL from facebook
*/
public function callback(SocialFacebookAccountService $service, Request $request)
{
if($request->has('code')) {
$user = $service->createOrGetUser(Socialite::driver('facebook')->user());
$token = JWTAuth::fromUser($user);
return redirect("/#/dashboard")->with('token', $token);
} else {
return Socialite::driver($provider)->redirect();
}
}
}
我可以从我的 fb 登录回调中获取我的 $token 和 $user,但是当我将它重定向回仪表板时,我仍然无法登录。有什么想法吗?
因为 JWT 是无状态的,而社交名流是有状态的。我猜你正在使用像 react 或类似的前端框架,你需要让你的前端框架使用 socialite。
现在我正致力于在前端应用它并在 https://github.com/websanova/vue-auth/blob/master/docs/Methods.md 中看到这段代码 ($auth.oauth2) 当我调用函数 social('facebook') 时它运行良好,发送 client_id 并将我重定向到回调并从 Facebook 获得 'code' 响应。问题是当我被重定向回我的回调 url 我的 mounted() 当它检测到 URL 中有代码时我再次发送请求并使用参数 this.code然后我得到错误:
客户端错误:POST graph.facebook.com/v3.0/oauth/access_token
导致 400 Bad Request
响应
无法加载 URL:此 URL 的域未包含在应用的域中。能够加载这个
我设置了 'Valid OAuth Redirect URI' 但仍然出现同样的错误
<script>
export default {
data() {
return {
context: 'oauth2 context',
code: this.$route.params.code,
type: this.$route.params.type
};
},
mounted() {
var app = this
console.log(this.code)
console.log(this.type)
if (this.code) {
this.$auth.oauth2({
code: true,
provider: this.type,
params: {
client_id: xxxxxx,
client_secret: 'xxxxxxxx',
code: this.code,
redirect_uri: 'mysite.com/#/dashboard'
},
success: function(res) {
console.log('success ' + this.context);
},
error: function (res) {
console.log('error ' + this.context);
console.log(res);
},
});
}
},
methods: {
social(type) {
this.$auth.oauth2({
provider: type || this.type,
rememberMe: true,
params: {
// code: this.code,
client_id: xxxxxxxx,
client_secret: 'xxxxxxxx',
redirect_uri: 'mysite.com/api/redirect/social'
},
success: function(res) {
console.log('success ' + this.context);
},
error: function (res) {
console.log('error ' + this.context);
}
});
}
}
}
</script>
```
我正在与社交名流和 jwt auth 合作,这是我的代码
class SocialAuthFacebookController extends Controller
{
/**
* Create a redirect method to facebook api.
*
* @return void
*/
public function redirect()
{
$provider = 'facebook';
try {
$socialite = Socialite::driver($provider)->redirect();
} catch (InvalidStateException $e) {
$socialite = Socialite::driver($provider)->stateless()->redirect();
}
return $socialite;
}
/**
* Return a callback method from facebook api.
*
* @return callback URL from facebook
*/
public function callback(SocialFacebookAccountService $service, Request $request)
{
if($request->has('code')) {
$user = $service->createOrGetUser(Socialite::driver('facebook')->user());
$token = JWTAuth::fromUser($user);
return redirect("/#/dashboard")->with('token', $token);
} else {
return Socialite::driver($provider)->redirect();
}
}
}
我可以从我的 fb 登录回调中获取我的 $token 和 $user,但是当我将它重定向回仪表板时,我仍然无法登录。有什么想法吗?
因为 JWT 是无状态的,而社交名流是有状态的。我猜你正在使用像 react 或类似的前端框架,你需要让你的前端框架使用 socialite。
现在我正致力于在前端应用它并在 https://github.com/websanova/vue-auth/blob/master/docs/Methods.md 中看到这段代码 ($auth.oauth2) 当我调用函数 social('facebook') 时它运行良好,发送 client_id 并将我重定向到回调并从 Facebook 获得 'code' 响应。问题是当我被重定向回我的回调 url 我的 mounted() 当它检测到 URL 中有代码时我再次发送请求并使用参数 this.code然后我得到错误:
客户端错误:POST graph.facebook.com/v3.0/oauth/access_token
导致 400 Bad Request
响应
无法加载 URL:此 URL 的域未包含在应用的域中。能够加载这个
我设置了 'Valid OAuth Redirect URI' 但仍然出现同样的错误
<script>
export default {
data() {
return {
context: 'oauth2 context',
code: this.$route.params.code,
type: this.$route.params.type
};
},
mounted() {
var app = this
console.log(this.code)
console.log(this.type)
if (this.code) {
this.$auth.oauth2({
code: true,
provider: this.type,
params: {
client_id: xxxxxx,
client_secret: 'xxxxxxxx',
code: this.code,
redirect_uri: 'mysite.com/#/dashboard'
},
success: function(res) {
console.log('success ' + this.context);
},
error: function (res) {
console.log('error ' + this.context);
console.log(res);
},
});
}
},
methods: {
social(type) {
this.$auth.oauth2({
provider: type || this.type,
rememberMe: true,
params: {
// code: this.code,
client_id: xxxxxxxx,
client_secret: 'xxxxxxxx',
redirect_uri: 'mysite.com/api/redirect/social'
},
success: function(res) {
console.log('success ' + this.context);
},
error: function (res) {
console.log('error ' + this.context);
}
});
}
}
}
</script>
```