狼道精神 發表於 2023-7-20 00:00:00

解决phpcms V9整合discuz! X3.0后 在phpcms新注册用户需要在discuz激活的问题

<p>
分析其主要原因是phpsso与ucenter通信成功后,XXX_ucenter_member表中的用户已经同步成功但是在XXX_common_member中并没有此用户,所以只要在xxx_common_member中插入此用户就可以了,所以修改discuz/api/uc.php下的synlogin函数就可以了,修改为</p>
<blockquote>
<ol>
<li>
<span><span>function</span><span> synlogin($get, $post) {    </span></span>
</li>
<li>
<span>        global $_G;    </span>
</li>
<li>
<span>   </span>
</li>
<li>
<span>        <span>if</span><span>(!API_SYNLOGIN) {    </span></span>
</li>
<li>
<span>            <span>return</span><span> API_RETURN_FORBIDDEN;    </span></span>
</li>
<li>
<span>        }    </span>
</li>
<li>
<span>   </span>
</li>
<li>
<span>        header(<span>'P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'</span><span>);    </span></span>
</li>
<li>
<span>   </span>
</li>
<li>
<span>        $cookietime = 31536000;    </span>
</li>
<li>
<span>        $uid = intval($get[<span>'uid'</span><span>]);    </span></span>
</li>
<li>
<span>        $query = DB::query(<span>"SELECT uid, username, password FROM "</span><span>.DB::table(</span><span>'common_member'</span><span>).</span><span>" WHERE uid='$uid'"</span><span>);    </span></span>
</li>
<li>
<span>        <span>if</span><span> ($member = DB::fetch($query))    </span></span>
</li>
<li>
<span>        {    </span>
</li>
<li>
<span>            dsetcookie(<span>'auth'</span><span>, authcode(</span><span>"$member\t$member"</span><span>, </span><span>'ENCODE'</span><span>), $cookietime);    </span></span>
</li>
<li>
<span>        }<span>else</span><span>   </span></span>
</li>
<li>
<span>        {    </span>
</li>
<li>
<span>            $username = $get[<span>'username'</span><span>];    </span></span>
</li>
<li>
<span>            $query = DB::query(<span>"SELECT uid, username, password, email FROM "</span><span>.DB::table(</span><span>'ucenter_members'</span><span>).</span><span>" WHERE username='$username'"</span><span>);    </span></span>
</li>
<li>
<span>            $member = DB::fetch($query);    </span>
</li>
<li>
<span>            $password = $member[<span>'password'</span><span>];    </span></span>
</li>
<li>
<span>            $email = $member[<span>'email'</span><span>];    </span></span>
</li>
<li>
<span>            $ip = $_SERVER[<span>'REMOTE_ADDR'</span><span>];    </span></span>
</li>
<li>
<span>            $time = time();    </span>
</li>
<li>
<span>            $userdata = array(    </span>
</li>
<li>
<span>                <span>'uid'</span><span>=&gt;$uid,    </span></span>
</li>
<li>
<span>                <span>'username'</span><span>=&gt;$username,    </span></span>
</li>
<li>
<span>                <span>'password'</span><span>=&gt;$password,    </span></span>
</li>
<li>
<span>                <span>'email'</span><span>=&gt;$email,    </span></span>
</li>
<li>
<span>                <span>'adminid'</span><span>=&gt;0,    </span></span>
</li>
<li>
<span>                <span>'groupid'</span><span>=&gt;10,    </span></span>
</li>
<li>
<span>                <span>'regdate'</span><span>=&gt;$time,    </span></span>
</li>
<li>
<span>                <span>'credits'</span><span>=&gt;0,    </span></span>
</li>
<li>
<span>                <span>'timeoffset'</span><span>=&gt;9999    </span></span>
</li>
<li>
<span>            );    </span>
</li>
<li>
<span>            DB::insert(<span>'common_member'</span><span>, $userdata);    </span></span>
</li>
<li>
<span>   </span>
</li>
<li>
<span>            $status_data = array(    </span>
</li>
<li>
<span>                <span>'uid'</span><span> =&gt; $uid,    </span></span>
</li>
<li>
<span>                <span>'regip'</span><span> =&gt; $ip,    </span></span>
</li>
<li>
<span>                <span>'lastip'</span><span> =&gt; $ip,    </span></span>
</li>
<li>
<span>                <span>'lastvisit'</span><span> =&gt; $time,    </span></span>
</li>
<li>
<span>                <span>'lastactivity'</span><span> =&gt; $time,    </span></span>
</li>
<li>
<span>                <span>'lastpost'</span><span> =&gt; 0,    </span></span>
</li>
<li>
<span>                <span>'lastsendmail'</span><span> =&gt; 0    </span></span>
</li>
<li>
<span>            );    </span>
</li>
<li>
<span>            DB::insert(<span>'common_member_status'</span><span>, $status_data);    </span></span>
</li>
<li>
<span>            DB::insert(<span>'common_member_profile'</span><span>, array(</span><span>'uid'</span><span> =&gt; $uid));    </span></span>
</li>
<li>
<span>            DB::insert(<span>'common_member_field_forum'</span><span>, array(</span><span>'uid'</span><span> =&gt; $uid));    </span></span>
</li>
<li>
<span>            DB::insert(<span>'common_member_field_home'</span><span>, array(</span><span>'uid'</span><span> =&gt; $uid));    </span></span>
</li>
<li>
<span>            DB::insert(<span>'common_member_count'</span><span>, array(</span><span>'uid'</span><span> =&gt; $uid));    </span></span>
</li>
<li>
<span>            DB::query(<span>'UPDATE '</span><span>.DB::table(</span><span>'common_setting'</span><span>).</span><span>" SET svalue='$username' WHERE skey='lastmember'"</span><span>);    </span></span>
</li>
<li>
<span>            $query = DB::query(<span>"SELECT uid, username, password FROM "</span><span>.DB::table(</span><span>'common_member'</span><span>).</span><span>" WHERE uid='$uid'"</span><span>);    </span></span>
</li>
<li>
<span>            <span>if</span><span> ($member = DB::fetch($query))    </span></span>
</li>
<li>
<span>            {    </span>
</li>
<li>
<span>                dsetcookie(<span>'auth'</span><span>, authcode(</span><span>"$member\t$member"</span><span>, </span><span>'ENCODE'</span><span>), $cookietime);    </span></span>
</li>
<li>
<span>            }    </span>
</li>
<li>
<span>        }    </span>
</li>
<li>
<span>    }   </span>
</li>
</ol>
</blockquote>
<p>
这样在phpcms中注册后去discuz中就可以不用激活就自动登录了</p>
頁: [1]
查看完整版本: 解决phpcms V9整合discuz! X3.0后 在phpcms新注册用户需要在discuz激活的问题