微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel 7 Socialite ORCID 包 500 内部服务器错误

如何解决Laravel 7 Socialite ORCID 包 500 内部服务器错误

使用 Laravel 7 和 this 包,我尝试使用一个简单的链接使用 orcid 社交名流注册创建誓言。

文档(““3 条腿 OAuth”是如何工作的?”): https://info.orcid.org/documentation/integration-and-api-faq/#easy-faq-2537

 <a href="login/orcid" class="btn btn-primary">Login Using Orcid</a>

用户点击按钮时,会发生重定向,但当发生重定向时,系统不允许用户“Grand”或“Deny”与服务的连接。相反,一个空白页面会将用户重定向回我的项目。

在整个过程中,我可以看到 URL 发生变化,到 Orchid.org/[etc][client_id] 所以我认为与 Orcid 建立了连接。

但后来我得到一个 URL orcid/callback#error=invalid_scope 还有一条错误信息:

服务器错误POST https://orcid.org/oauth/token 导致 500 Internal Server Error 响应:{"error":"server_error","error_description":"必须提供授权码。"}

我错过了什么吗?

我的 .env 变量

ORCID_CLIENT_ID=XXX
ORCID_CLIENT_SECRET=XXX
ORCID_REDIRECT_URL=https://WEE/login/orcid/callback
ORCID_ENVIRONMENT=production

我的 LoginController 函数用于我的路由:

 public function orchidLogin(){

        return Socialite::driver('orcid')->redirect();
    }

    public function handleOrcidCallback(Request $request){

        //How do I get the data for registration???

    }

我的路线:

Route::get('login/orcid','Auth\LoginController@orchidLogin');
Route::get('login/orcid/callback','Auth\LoginController@handleOrcidCallback');

解决方法

在遇到同样的问题后,深入挖掘提到的 package 发现包默认假定范围在 vendor\socialite\orcid\provider 中,即 protected $scopes = ['/authenticate','/read-limited']; 如果您只注册了公共 API,那么范围 '/read-limited' 对您不可用。这就是为什么您会收到错误 #error=invalid_scope 并且根据 ORCID 文档 Here 范围 /read-limited(仅适用于 Member API)。

所以要解决这个问题,你有两个选择:

  1. 注册会员 API。
  2. 仅分配公共 API 范围。

喜欢Socialite::driver('orcid')->scopes(['/authenticate','openid'])->redirect()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。