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>

```