المتصفح: Firefox 83.0 (64 بت)
يعمل SSO بشكل صحيح في Chrome باستخدام سكريبت PHP الموجود في هذا المنتدى، لكنه في Firefox يضيف == قبل &sig، هل يعرف أحد ما الذي قد يسبب ذلك؟
session/sso_provider?sso=bm9uY2U9MmE4YmE2NmE0ZmRmYjRlM2JmNGJmMDkzNTliZjg3MWVlZDhkMTIzNTRiMzc4OGQyNTAwYzY3NjBiZjEwNWMyNmYzMTUxNmE4NTc0NDdjNzE0YmRkYTM4MTljMmFjOTA5NmY0MDkyNWQ5NWIwOTFkMDVmM2QzZDIyZDhmYTdiMzYmcmV0dXJuX3Nzb191cmw9aHR0cHMlM0ElMkYlMkZ2Y2VsaXF1aWRyZWNpcGVzLmNvbSUyRmNvbnRyb2xsZXJzJTJGbG9naW5Db250cm9sLnBocA==&sig=261ee2477e94edcbcc1513e248091860445ed2c2cc8f30835a1fd061ff0
simon
9 ديسمبر 2020، 4:50م
2
مجتمع التدخين الإلكتروني، مشاركة:1، موضوع:172694:
يعمل الدخول الموحد (SSO) بشكل جيد في متصفح كروم باستخدام سكريبت PHP الموجود في هذا المنتدى، لكن في فايرفوكس يضيف “==” قبل &sig، هل يعرف أحد ما الذي قد يسبب ذلك؟
هل يمكنك مشاركة رابط السكريبت PHP الذي تستخدمه؟
michaeld
(Michael - Communiteq)
9 ديسمبر 2020، 5:11م
3
هذا جزء من السلسلة المشفرة بـ base64. يجب عليك استخدام دالة urlencode() قبل إرسالها إلى العميل. هل قمت بذلك؟ هل يمكنك مشاركة كودك؟
الكود على النحو التالي، شكرًا مقدّمًا
لقد عدّلت هذا Discourse sso provider login · GitHub
رابط الموقع الذي يستخدمه والذي يواجه المشكلة في Firefox: https://vceliquidrecipes.com/
نموذج تسجيل الدخول
<div class="row mt-1">
<div class="col-md-12 d-flex justify-content-center">
<p><a class="btn btn-success" href="'.$discourse_url.'/session/sso_provider?'.$query.'" role="button">تسجيل الدخول</a> <a class="btn btn-success" href="https://vapingcommunity.co.uk/signup" role="button">التسجيل</a></p>
</div>
</div>
$sso_secret = 'ITSASECRET';
$discourse_url = 'https://vapingcommunity.co.uk';
$nonce = hash('sha512', mt_rand());
$_SESSION['nonce'] = $nonce;
$payload = base64_encode( http_build_query( array (
'nonce' => $nonce,
'return_sso_url' => $me
)
) );
$request = array(
'sso' => $payload,
'sig' => hash_hmac('sha256', $payload, $sso_secret )
);
$query = http_build_query($request);
if(!empty($_GET) and isset($_GET['sso'])){
$sso_secret = 'ITSASECRET';
if(isset($_SESSION['loggedin']) && isset($_SESSION['username']) && $_SESSION['loggedin'] == true){
header("location: /");
die();
}
$sso = $_GET['sso'];
$sig = $_GET['sig'];
if(hash_hmac('sha256', urldecode($sso), $sso_secret) !== $sig){
header("HTTP/1.1 404 Not Found");
die();
}
في وحدة التحكم الخاصة بي
$sso = urldecode($sso);
$query = array();
parse_str(base64_decode($sso), $query);
$username = $query['username'];
$useremail = $query['email'];
if(!empty($query['avatar_url'])) {
$avatar_url = $query['avatar_url'];
}
else {
$avatar_url = $miscf->fullURL().'/images/defaultAvatar.png';
}
$userisadmin = $query['admin'];
$userismoderator = $query['moderator'];
$usergroup = $query['groups'];
$externalid = $query['external_id'];
if ($userf->checkUserEIDExists($externalid) == false) {
$userf->addUser($username,$useremail,$avatar_url,$userisadmin,$userismoderator,$usergroup,$externalid);
}
$nonce = $_SESSION['nonce'];
if($query['nonce'] != $nonce){
header("HTTP/1.1 404 Not Found");
die();
}
$userf->loginUser($query['username'],$query['external_id'],$avatar_url,$query['groups']);
دالة تسجيل الدخول:
*تقوم بإعداد ملف تعريف الارتباط وتنفيذ مهام أخرى متنوعة مثل فحص المستخدم*
*تنتهي بهذا*
if(isset($_SESSION['url']))
$url = $_SESSION['url'];
else
$url = "";
$miscf = new miscf();
$fullurl = $miscf->fullURL().$url;
header("Location:".$fullurl);
unset($_SESSION['url']);
die();
michaeld
(Michael - Communiteq)
9 ديسمبر 2020، 7:35م
5
حسناً، يبدو كل شيء جيداً. وكيف يسبب هذا مشكلة؟ بما أنني أعتقد أنه يجب أن يعمل على أي حال..
حسنًا، يسعدني أنك سألت. يبدو أن تسجيل الدخول يتم بنجاح، لكن عند العودة إلى الموقع، لا يظهر قائمة المستخدم، بل يظهر زر تسجيل الدخول مرة أخرى تحت رابط المستخدم في شريط التنقل.
أبدأ في التساؤل عما إذا كانت المشكلة مرتبطة بملفات تعريف الارتباط (الكوكيز)، لكنها تعمل بشكل مثالي في متصفح كروم. يبدو الأمر كما لو أن فحص حالة “تسجيل الدخول” يتم تجاهله عند تحميل الصفحة لأول مرة، حيث تظهر جميع عناصر تنقل المستخدم عند تحديث الصفحة. أود التأكيد على أن هذه المشكلة تحدث فقط في متصفح فايرفوكس.
michaeld
(Michael - Communiteq)
9 ديسمبر 2020، 7:42م
7
حسناً، هذا غريب حقاً.
ومع ذلك، أعتقد أن هذا لا علاقة له بحقيقة أن الرمز == غير مُرمَّز في عنوان URL. لذا، قد تكون على المسار الخاطئ هنا.
سأواصل المحاولة حتى أصلح المشكلة وأعود لأبلغك عن ذلك، شكرًا لك على مساعدتك