爱你祖国 發表於 2021-11-23 10:39:00

gitee三方登录

<h5 class="md-end-block md-heading md-focus"><span class="md-plain md-expand">gitee三方登录</span></h5>
<p class="md-end-block md-p"><span class="md-plain">步骤</span></p>
<p class="md-end-block md-p"><span class="md-plain">1、先在gitee设置的第三方应用上创建应用,编写回调地址,和网址主页,生成Client ID 和 Client Secret</span></p>
<p class="md-end-block md-p"><span class="md-plain">2、在点击用户授权之后,会在回调地址栏上出现一个code获取到code,请求 <span class="md-link md-pair-s">https://gitee.com/oauth/token<span class="md-plain"> 地址,post请求, '<span class="md-link md-pair-s">https://gitee.com/oauth/token?grant_type=authorization_code&amp;<span class="md-plain">' . $code . '&amp;client_id=' . $client_id . '&amp;redirect_uri=' . $redirect_uri . '&amp;client_secret=' . $client_secret; 拼接url请求可以获得一个token。</span></span></span></span></span></p>
<p class="md-end-block md-p"><span class="md-plain">3、通过token请求<span class="md-link md-pair-s">https://gitee.com/api/v5/user<span class="md-plain">地址,get请求,<span class="md-link md-pair-s">https://gitee.com/api/v5/user?access_token=<span class="md-plain">' . $token,获得用户的基本信息$userinfo.</span></span></span></span></span></p>
<p class="md-end-block md-p"><span class="md-plain">4、创建一个三方关联表,将用户信息和三方关联的信息存在表中,用来判断该三方账号是否已经绑定用户账号,没有则新增一个用户,返回用户信息,有的话就返回用户信息。</span></p>
<pre class="md-fences md-end-block ty-contain-cm modeLoaded"><span><span class="cm-keyword">CREATE <span class="cm-keyword">TABLE <span class="cm-variable-2">`trilateral_login` <span class="cm-bracket">(<br><span> &nbsp;<span class="cm-variable-2">`id` <span class="cm-builtin">int <span class="cm-builtin">unsigned <span class="cm-keyword">NOT <span class="cm-atom">NULL <span class="cm-keyword">AUTO_INCREMENT<span class="cm-punctuation">,<br><span> &nbsp;<span class="cm-variable-2">`type` <span class="cm-builtin">int <span class="cm-keyword">DEFAULT <span class="cm-atom">NULL <span class="cm-keyword">COMMENT <span class="cm-string">'三方服务 1:gitee'<span class="cm-punctuation">,<br><span> &nbsp;<span class="cm-variable-2">`user_id` <span class="cm-builtin">int <span class="cm-keyword">DEFAULT <span class="cm-atom">NULL <span class="cm-keyword">COMMENT <span class="cm-string">'用户的id'<span class="cm-punctuation">,<br><span> &nbsp;<span class="cm-variable-2">`auth_id` <span class="cm-builtin">varchar<span class="cm-bracket">(<span class="cm-number">255<span class="cm-bracket">) <span class="cm-keyword">CHARACTER <span class="cm-keyword">SET utf8 <span class="cm-keyword">COLLATE utf8_bin <span class="cm-keyword">DEFAULT <span class="cm-atom">NULL <span class="cm-keyword">COMMENT <span class="cm-string">'验证的三方登录的唯一标识'<span class="cm-punctuation">,<br><span> &nbsp;<span class="cm-variable-2">`init_time` <span class="cm-builtin">int <span class="cm-keyword">DEFAULT <span class="cm-atom">NULL<span class="cm-punctuation">,<br><span> &nbsp;<span class="cm-variable-2">`last_time` <span class="cm-builtin">timestamp <span class="cm-atom">NULL <span class="cm-keyword">DEFAULT <span class="cm-keyword">CURRENT_TIMESTAMP <span class="cm-keyword">ON <span class="cm-keyword">UPDATE <span class="cm-keyword">CURRENT_TIMESTAMP<span class="cm-punctuation">,<br><span> &nbsp;<span class="cm-keyword">PRIMARY <span class="cm-keyword">KEY <span class="cm-bracket">(<span class="cm-variable-2">`id`<span class="cm-bracket">)<br><span><span class="cm-bracket">) <span class="cm-keyword">ENGINE<span class="cm-operator">=<span class="cm-keyword">InnoDB <span class="cm-keyword">AUTO_INCREMENT<span class="cm-operator">=<span class="cm-number">7 <span class="cm-keyword">DEFAULT <span class="cm-string-2">CHARSET<span class="cm-operator">=utf8mb3 <span class="cm-keyword">COLLATE<span class="cm-operator">=utf8_bin <span class="cm-keyword">COMMENT<span class="cm-operator">=<span class="cm-string">'三方关联表'<span class="cm-punctuation">;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
<h6 class="md-end-block md-heading"><span class="md-plain">配置文件config.php新增的配置</span></h6>
<pre class="md-fences md-end-block ty-contain-cm modeLoaded"><span><span class="cm-variable-2">$config[<span class="cm-string">'gitee_get_token'] <span class="cm-operator">= <span class="cm-string">'https://gitee.com/oauth/token';<br><span><span class="cm-variable-2">$config[<span class="cm-string">'gitee_get_info'] <span class="cm-operator">= <span class="cm-string">'https://gitee.com/api/v5/user';<br><span><span class="cm-variable-2">$config[<span class="cm-string">'gitee_client_id'] <span class="cm-operator">= <span class="cm-string">'70fe5fdf4ed079a2998a*********1e0af6a61bb80ae92b691e025eef2607***';<br><span><span class="cm-variable-2">$config[<span class="cm-string">'gitee_client_secret'] <span class="cm-operator">= <span class="cm-string">'7c02b14f9ea47f67*********fbd3f2b0a914b89f1f42ab76febdc12cf******';<br><span><span class="cm-variable-2">$config[<span class="cm-string">'gitee_redirect_uri'] <span class="cm-operator">= <span class="cm-string">'http://ci.com/gitCallback';</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
<h6 class="md-end-block md-heading"><span class="md-plain">controller代码</span></h6>
<pre class="md-fences md-end-block ty-contain-cm modeLoaded"><span><span class="cm-operator">&lt;?<span class="cm-variable">php<br><span><span class="cm-comment">/**<br><span> <span class="cm-comment">* Created by PhpStorm.<br><span> <span class="cm-comment">* User: wyq<br><span> <span class="cm-comment">* Date: 2021/10/15<br><span> <span class="cm-comment">* Time: 11:20<br><span> <span class="cm-comment">*/<br><span><span>​<br><span><span class="cm-keyword">class <span class="cm-def">Callback <span class="cm-keyword">extends <span class="cm-variable">Base_Controller<br><span>{<br><span> &nbsp; &nbsp;<span class="cm-keyword">public <span class="cm-keyword">function <span class="cm-def">__construct()<br><span> &nbsp;{<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-keyword">parent::<span class="cm-variable">__construct();<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-2">$this<span class="cm-operator">-&gt;<span class="cm-variable">load<span class="cm-operator">-&gt;<span class="cm-variable">model(<span class="cm-string">'Users_model');<br><span> &nbsp;}<br><span> &nbsp; &nbsp;<span class="cm-comment">//回调地址<br><span> &nbsp; &nbsp;<span class="cm-keyword">public <span class="cm-keyword">function <span class="cm-def">gitCallback()<br><span> &nbsp;{<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-comment">//获取当前用户返回的code<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-keyword">if (<span class="cm-keyword">empty(<span class="cm-variable-2">$_SERVER[<span class="cm-string">'QUERY_STRING'])) {<br><span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable">fail(<span class="cm-number">400, <span class="cm-string">'参数错误');<br><span> &nbsp; &nbsp; &nbsp;}<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-comment">//获取到返回的code<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-2">$code <span class="cm-operator">= <span class="cm-variable-2">$_SERVER[<span class="cm-string">'QUERY_STRING'];<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-comment">//配置文件获取配置信息<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-2">$get_token_url <span class="cm-operator">= <span class="cm-variable">config_item(<span class="cm-string">'gitee_get_token');<span class="cm-comment">//获取token的url<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-2">$client_id <span class="cm-operator">= <span class="cm-variable">config_item(<span class="cm-string">'gitee_client_id');<span class="cm-comment">//获取client_id<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-2">$redirect_uri <span class="cm-operator">= <span class="cm-variable">config_item(<span class="cm-string">'gitee_redirect_uri');<span class="cm-comment">//获取回调地址<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-2">$client_secret <span class="cm-operator">= <span class="cm-variable">config_item(<span class="cm-string">'gitee_client_secret');<span class="cm-comment">//获取client_secret<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-2">$get_info_url <span class="cm-operator">= <span class="cm-variable">config_item(<span class="cm-string">'gitee_get_info');<span class="cm-comment">//通过token获取用户信息的url<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-comment">//发送curl获取当前用户的token<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-2">$url1 <span class="cm-operator">= <span class="cm-variable-2">$get_token_url . <span class="cm-string">'?grant_type=authorization_code&amp;' . <span class="cm-variable-2">$code . <span class="cm-string">'&amp;client_id=' . <span class="cm-variable-2">$client_id . <span class="cm-string">'&amp;redirect_uri=' . <span class="cm-variable-2">$redirect_uri . <span class="cm-string">'&amp;client_secret=' . <span class="cm-variable-2">$client_secret;<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-2">$res <span class="cm-operator">= <span class="cm-variable">curl_request(<span class="cm-variable-2">$url1);<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-2">$res <span class="cm-operator">= <span class="cm-builtin">json_decode(<span class="cm-variable-2">$res, <span class="cm-atom">true);<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-2">$token <span class="cm-operator">= <span class="cm-variable-2">$res[<span class="cm-string">'access_token'];<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-comment">//通过token获取用户基本信息<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-2">$url2 <span class="cm-operator">= <span class="cm-variable-2">$get_info_url . <span class="cm-string">'?access_token=' . <span class="cm-variable-2">$token;<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-2">$info <span class="cm-operator">= <span class="cm-variable">curl_request(<span class="cm-variable-2">$url2, <span class="cm-atom">false);<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-2">$info <span class="cm-operator">= <span class="cm-builtin">json_decode(<span class="cm-variable-2">$info, <span class="cm-atom">true);<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-comment">//通过gitee的id判断该用户gitee账号是否已经注册<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-2">$count <span class="cm-operator">= <span class="cm-variable-2">$this<span class="cm-operator">-&gt;<span class="cm-variable">Users_model<span class="cm-operator">-&gt;<span class="cm-variable">checkTrilateralLogin(<span class="cm-number">1, <span class="cm-variable-2">$info[<span class="cm-string">'id']);<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-2">$count <span class="cm-operator">= <span class="cm-variable-2">$count[<span class="cm-number">0][<span class="cm-string">'num'];<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-comment">//使用过gitee三方账号登录<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-keyword">if (<span class="cm-operator">!<span class="cm-keyword">empty(<span class="cm-variable-2">$info[<span class="cm-string">'id'])){<br><span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-keyword">if (<span class="cm-variable-2">$count <span class="cm-operator">&gt; <span class="cm-number">0) {<br><span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-2">$userInfo <span class="cm-operator">= <span class="cm-variable-2">$this<span class="cm-operator">-&gt;<span class="cm-variable">Users_model<span class="cm-operator">-&gt;<span class="cm-variable">TrilateralLogin(<span class="cm-variable-2">$info[<span class="cm-string">'id']);<br><span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable">success(<span class="cm-variable-2">$userInfo);<br><span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} <span class="cm-keyword">else {<br><span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-2">$userInfo <span class="cm-operator">= <span class="cm-variable-2">$this<span class="cm-operator">-&gt;<span class="cm-variable">Users_model<span class="cm-operator">-&gt;<span class="cm-variable">TrilateralRegister(<span class="cm-variable-2">$info[<span class="cm-string">'name'], <span class="cm-variable">encrypt(<span class="cm-number">123), <span class="cm-number">1, <span class="cm-variable-2">$info[<span class="cm-string">'id']);<br><span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable">success(<span class="cm-variable-2">$userInfo);<br><span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br><span> &nbsp; &nbsp; &nbsp;}<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable">fail(<span class="cm-number">400,<span class="cm-string">'信息有误');<br><span> &nbsp;}<br><span>}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
<h6 class="md-end-block md-heading"><span class="md-plain">model代码</span></h6>
<pre class="md-fences md-end-block ty-contain-cm modeLoaded"><span class="cm-tab-wrap-hack"> <span class="cm-tab">   <br><span><span class="cm-tab">    <span class="cm-comment">//判断三方登录表中是否有该id用户,即是否该三方账号已经绑定用户<br><span> &nbsp; &nbsp;<span class="cm-keyword">public <span class="cm-keyword">function <span class="cm-def">checkTrilateralLogin(<span class="cm-variable-2">$type, <span class="cm-variable-2">$id)<br><span> &nbsp;{<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-keyword">return <span class="cm-variable-2">$this<span class="cm-operator">-&gt;<span class="cm-variable">commonQuery(<span class="cm-string">'count(id) num', [<span class="cm-string">'type' <span class="cm-operator">=&gt; <span class="cm-variable-2">$type, <span class="cm-string">'auth_id' <span class="cm-operator">=&gt; <span class="cm-variable-2">$id], <span class="cm-string">'trilateral_login');<br><span> &nbsp;}<br><span><span>​<br><span> &nbsp; &nbsp;<span class="cm-comment">//使用三方返回的用户信息注册用户,返回用户信息<br><span> &nbsp; &nbsp;<span class="cm-keyword">public <span class="cm-keyword">function <span class="cm-def">TrilateralRegister(<span class="cm-variable-2">$nickname, <span class="cm-variable-2">$password, <span class="cm-variable-2">$type, <span class="cm-variable-2">$auth_id)<br><span> &nbsp;{<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-2">$this<span class="cm-operator">-&gt;<span class="cm-variable">db<span class="cm-operator">-&gt;<span class="cm-variable">insert(<span class="cm-string">'users', [<span class="cm-string">'nickname' <span class="cm-operator">=&gt; <span class="cm-variable-2">$nickname, <span class="cm-string">'password' <span class="cm-operator">=&gt; <span class="cm-variable-2">$password, <span class="cm-string">'username' <span class="cm-operator">=&gt; <span class="cm-variable-2">$nickname, <span class="cm-string">'create_time' <span class="cm-operator">=&gt; <span class="cm-builtin">time()]);<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-2">$user_id <span class="cm-operator">= <span class="cm-variable-2">$this<span class="cm-operator">-&gt;<span class="cm-variable">db<span class="cm-operator">-&gt;<span class="cm-variable">insert_id(<span class="cm-string">'users');<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-2">$this<span class="cm-operator">-&gt;<span class="cm-variable">commonInsert(<span class="cm-string">'trilateral_login', [<span class="cm-string">'type' <span class="cm-operator">=&gt; <span class="cm-variable-2">$type, <span class="cm-string">'user_id' <span class="cm-operator">=&gt; <span class="cm-variable-2">$user_id, <span class="cm-string">'auth_id' <span class="cm-operator">=&gt; <span class="cm-variable-2">$auth_id, <span class="cm-string">'init_time' <span class="cm-operator">=&gt; <span class="cm-builtin">time()]);<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-keyword">return <span class="cm-variable-2">$this<span class="cm-operator">-&gt;<span class="cm-variable">commonQuery(<span class="cm-string">'*', [<span class="cm-string">'id' <span class="cm-operator">=&gt; <span class="cm-variable-2">$user_id], <span class="cm-string">'users');<br><span> &nbsp;}<br><span><span>​<br><span><span class="cm-tab">    <span class="cm-comment">//在三方绑定表中,通过用户id获取用户信息<br><span> &nbsp; &nbsp;<span class="cm-keyword">public <span class="cm-keyword">function <span class="cm-def">TrilateralLogin(<span class="cm-variable-2">$auth_id)<br><span> &nbsp;{<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-2">$user_id <span class="cm-operator">= <span class="cm-variable-2">$this<span class="cm-operator">-&gt;<span class="cm-variable">commonQuery(<span class="cm-string">'user_id', [<span class="cm-string">'auth_id' <span class="cm-operator">=&gt; <span class="cm-variable-2">$auth_id], <span class="cm-string">'trilateral_login');<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable-2">$user_id <span class="cm-operator">= <span class="cm-variable-2">$user_id[<span class="cm-number">0][<span class="cm-string">'user_id'];<br><span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-keyword">return <span class="cm-variable-2">$this<span class="cm-operator">-&gt;<span class="cm-variable">commonQuery(<span class="cm-string">'*', [<span class="cm-string">'id' <span class="cm-operator">=&gt; <span class="cm-variable-2">$user_id], <span class="cm-string">'users');<br><span> &nbsp;}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
<p><span>&nbsp;</span></p><br><br>
来源:https://www.cnblogs.com/wyqgg/p/15592098.html
頁: [1]
查看完整版本: gitee三方登录