...
- پس از redirect شدن کاربر به سمت سامانه بر روی آدرس oauth/authorize/ کاربر را به / ریدارکت میکنیم و کنترلری برای اینکار نوشته شده که index.html حاوی انگولار را بر میگرداند.
- بعد از لود شدن صفحه انگولار درخواستی تحت عنوان initiate-login داده میشود که در آن اطلاعات موردنیاز برای صفحه لاگین و آدرس صفحه بعدی داده میشود
- پس از واردنمودن کدملی دکمه ادامه زده میشود که در آن آدرس صفحه بعدی از پاسخ سرویس قبلی فراخوانی میشود که در مرحله اول send/otp/ است
- پس از وارد کردن کد پیامکی توسط کاربر سرویس authenticate/first-page/ فراخوانی میشود و در صورت موفقیت آمیز بودن کلاینت درخواست آخر برای احرازهویت یعنی /login را میزند.
- در پاسخ این درخواست کاربر هدایت میشود به آدرس oauth/authorize/ که اول درخواست آن را داده بود و پس از آن به نهادمتکی که از آنجا اومده بود هدایت میشود.
جزئیات مراحل :
تمامی سرویسها نیاز است که مقدار cookie نشست برروی درخواست موجود باشد پس انگولار بر روی درخواستهای خود cookie را نیز ارسال میکند (نکتهای است که مقدار نشست در لیست cookieها قابل دسترسی در client نیست و مقدارش را client نمیتواند بفهمد و فقط در هر درخواست cookie را ارسال میکند).
سرویس initiate login
آدرس سرویس : initiate-login/
...
Code Block | ||||
---|---|---|---|---|
| ||||
{ "success": { "next_page": "login", "next_page_action": "http://192.168.1.118:8095/send/otp", "next_page_data": { "login": { "user_info": { "mobile_number": "09124958820", "national_number": "", "loa": "" }LEVEL_2_2", "client_infomobile_number_input_status": {"hidden" }, "scopeclient_titlesinfo": "",{ "clientscope_nametitles": "تلفن همراه، کد ملی", "client_idname": "ايران", "downloadclient_addressid": "abara" }, "general_info": { "captchadownload_address": "http://192.168.1.118:8095/download", "deprecate_address": "", "download_address": "" http://192.168.1.118:8095/deprecate/" } } }, "ready_for_final_authenticate": false } } |
توضیح پاسخ :
با فراخوانی این سرویس مشخص میشود که اصلا کاربر میتواند صفحه لاگین را ببیند یا اگر پاسخ خطا داشت صفحه خطا را ببیند یا صفحه لاگین را با حالت خطا ببیند.
- فیلد next_page نشان دهنده صفحه موردنظر است که چون ابتدا کاربر در صفحهای نیست به صفحه لاگین میرود
- فیلد next_page_action نشان دهندهی آدرسی است که با زدن دکمه ادامه یا ورود صفحه بعد فراخوانی میشود
- در قسمت next_page_data اطلاعات صفحه جاری موردنیاز در next_page قرار دارد و خود این قسمت دارای زیربخش باتوجه به هر قسمتی است در واقع چون الان در صفحه لاگین هستیم اطلاعات موردنیاز آن در زیرقسمت login است ولی برای نمونه اگر برای بخش otp بود میشد زیربخش otp و به طبع اطلاعات خاص خود را میداشتاین اطلاعات با زیر بخشی مشابه اسم next_page در next_page_data قرار میگیرد و بدان دلیل که الان قرار است صفحه لاگین فراخوانی شود مقدار next_page و زیر بخش next_page_data هر دو login است ولی اگر قرار بود صفحه otp یا pushotp نشان دادهشود این مقدار فرق میکرد.
- در قسمت user_info زیر بخش login اطلاعات کاربر قرار دارد
- در قسمت client_info اطلاعات نهاد متکی قراردارد و دیگر نیازی به فراخوانی سرویس download برای logo نیستیم و در همین پاسخ برگردانده میشود
- در قسمت general_info اطلاعات موردنیاز برای صفحه اول است.
- فیلد next_page نشان دهنده صفحه موردنظر است که چون در ابتدا کاربر در صفحهای نیست به صفحه لاگین میرود
- فیلد next_page_action نشان دهندهی آدرسی است که با زدن دکمه ادامه فراخوانی میشود
- مانند آدرس فراخوانی سرویس دانلود یا آدرس deprecate میباشد.
- فیلد ready_for_final_authenticate برابر false است و بدین معنی است که مراحل احرازهویت کاربر به اتمام نرسیدهاست.
نمونه پاسخ غلط (وقتی کاربر نیاز دارد فرآیند را از اول شروع کند)
Code Block | ||||
---|---|---|---|---|
| ||||
{ "error "next_page": {"error", "ready_for_final_authenticate": false, "next_pageerror": "error",{ "reason": "user should start process from the begining", "next_page_action":"", "next_page_data":{} اجازه دسترسی برای شما وجود ندارد، فرآیند را دوباره شروع کنید." } } |
...
- در قسمت error در صورتی که خطایی رخ داده باشد این فیلد در پاسخ قرار میگیرد و در صورت موفقیت آمیز بودن درخواست اثری از آن نیست.
- فیلد reason : نشان دهنده دلیل خطاست.
- فیلد next_page : وقتی برابر صفحه error باشد حالتی است که در آن باید کاربر را به صفحه error برد و در آنجا مقدار فیلد reason را در آن صفحه نشان داد.
- فیلد next_page : وقتی برابر صفحه ای مثل login, otp و یا push otp باشد باید مقدار خطا (reason) را در آن صفحه به صورت toast نشان دهد (اگر مقدار فیلد next_page با صفحه جاری برابر بود به طبع دیگر نیازی به تغییر صفحه نیست و همانجا باید پیام خطا toast شود)
سرویس ارسال پیامک
آدرس سرویس : send/otp/
...
Code Block | ||||
---|---|---|---|---|
| ||||
{ "error": { "next_page": "it can be any page or error pageotp", "reason": "error reason", "next_page_action": "http://192.168.1.118:8095/authenticate/first-page", "next_page_data": {} }, "success "otp": { "nextcode_expire_pagetime": "otp45", "next_page_action":"/authenticate/first-page" "next_page_data": { "otp_address": "http://192.168.1.118:8095/send/otp", "otpmobile_number": { "code_expire_date":12312 } "09121234567" }, }, "ready_for_final_authenticate": false } } |
توضیح پاسخ :
...
- فیلد next_page : وقتی برابر صفحه error باشد حالتی است که در آن باید کاربر را به صفحه error برد و در آنجا مقدار فیلد reason را در آن صفحه نشان داد.فیلد next_page : وقتی برابر صفحه ای مثل login, otp و یا push otp باشد باید مقدار خطا را در آن صفحه به صورت toast نشان دهد (اگر مقدار فیلد next_page با صفحه جاری برابر بود به طبع دیگر نیازی به تغییر صفحه نیست و همانجا باید پیام خطا toast شود)
فیلد reason : نشان دهنده دلیل خطاست. - فیلد next_page_action : آدرسی که دکمه موجود در آن صفحه حاوی خطا، دربر دارد تا کاربر آن را فراخوانی کند.
- فیلد next_page_data : اطلاعاتی که در آن صفحه حاوی خطا، نیاز است تا در صفحه نمایش داده بشود. در قسمت success در صورتی که عملیات با موفقیت انجام شود این فیلد در پاسخ قرار میگیرد.فیلد next_page : صفحه بعدی را صفحه بعدی otp را نشان میدهد .
- فیلد next_page_action : آدرسی که دکمه موجود در صفحه otp برای واردنمودن کد دریافت شده توسط کاربر را نشان میدهد
- فیلد next_page_data : اطلاعاتی که در صفحه آتی (اینجا otp) است را شامل میشود
- فیلد ready_for_final_authenticate : اگر برابر true بود در پاسخ هر سرویسی به منظور آن است که کاربر تمام مراحل احرازهویت موردنظر را به پایان رسانده است و باید درخواست login/ فراخوانی شود. که در جواب این درخواست کاربر redirect میشود.
...
- مانند شماره موبایل، مدت زمان انقضا کد ارسال ( بر اساس ثانیه ) و آدرس دکمه ارسال مجدد(otp_address) را نشان میدهد.
سرویس احرازهویت اطلاعات صفحه اول (first-page)
...
Code Block | ||||
---|---|---|---|---|
| ||||
{ "success": { "next_page": "otp", "next_page_action": "http://192.168.1.118:8095/login", "ready_for_final_authenticate": true } |
توضیح پاسخ :
- فیلد next_page برابر صفحه جاری قرار گرفت برای اینکه انتقال صفحهای دیگر نداشته باشیم زیرا مقدار ready_for_final_authenticate برابر true شده است و منظور آن است که تمام مراحل موردنیاز احرازهویت به اتمام رسیدهاست.
- با فراخوانی http://192.168.1.118:8095/login کاربر redirect میشود به آن نهادمتکی که از آماده است و آخرین مرحله ارتباط angular کلاینت در این نقطه است.
پاسخ خطا ( در صورتی که کاربر بیش از حد کد پیامکی را اشتباه واردکند و نیاز باشد صفحه pushotp نمایش دادهشود)
Code Block | ||||
---|---|---|---|---|
| ||||
{ "next_page": "push_otp", "next_page_action": "/login" http://192.168.1.118:8095/authenticate/first-page", "next_page_data":{} { "push_otp": { "code_expire_time": "180", "otp_address": "/send/otp", "push_code_value": "068603", "mobile_number": "09121234567", "push_code_provider": "لطفا با شماره گیری *725# کد را به سامانه سماوا ارسال فرمایید", "ready_for_final_authenticate "push_otp_check_status_interval": true }2 } } |
توضیح پاسخ :
...
}, "ready_for_final_authenticate |
...
": false
} |
پاسخ خطا (در صورتی که شاهکار اطلاعات کاربر را قبول نکند)
...