نسخه چاپی

ورود با بازار در وب به شما این امکان را می‌دهد تا بدون نیاز به پیاده‌سازی فرآیند ورود کاربران، ارسال ایمیل یا پیامک، همیشه به کاربر خود دسترسی داشته باشید؛ بنابراین، دیگر برای authenticate کردن کاربر، به ارسال پیامک نیازی ندارید و می‌توانید این کار را به بازار بسپارید.

بازار هنگام ارائه‌ی این امکان، ابتدا به‌ازای هر کاربرِ برنامه یا بازی، یک user Id یکتا و پایدار در اختیار شما قرار می‌دهد. شما می‌توانید با دریافت permission از سوی کاربران‌تان، در آینده به اطلاعات دیگری نیز دسترسی داشته باشید.


«ورود با بازار» از پروتکل رسمی Oauth2 استفاده می‌کند. برای راه‌اندازی «ورود با بازار در وب»، مراحل زیر را طی کنید:

۱. مقادیر کلاینت آی‌دی <CLIENT_ID> و رمز <SECRET> خود را از پیشخان، قسمت «ورود با بازار»، دریافت کنید.

ورود با بازار

۲. کاربر را برای «ورود با بازار» به آدرس زیر هدایت کنید:‌

<https://cafebazaar.ir/user/oauth?redirect_url=<REDIRECT_URL>&client_id=<CLIENT_ID>&state=<STATE>

در این آدرس، <REDIRECT_URL> آدرسِ سرور وب شما است، که پاسخ oauth را در مرحله‌ی بعدی در حالت  escape شده تولید می‌کند.

 <CLIENT_ID>، کلاینت آی‌دی شما در مرحله‌ی قبل است.

پارامتر state یک مقدار دلخواه (عدد و حروف انگلیسی) است. مقداری که برای state در این مرحله تنظیم می‌کنید، در مرحله‌ی بعدی به شما بازگردانده می‌شود. به‌‌منظور رعایت ملاحظات امنیتی، باید به کمک این پارامتر اطمینان دهید که سرویس شما، شروع‌کننده‌ی فرآیند لاگین بوده است.
کاربر پس از هدایت به آدرسِ گفته‌شده، وارد حساب کاربری خود در بازار می‌شود و دسترسی برنامه‌ی شما به اطلاعات خود را تأیید می‌کند.

۳. بازار کاربر را به <REDIRECT_URL> هدایت می‌کند. درصورتی‌که کاربر بدون مشکل وارد حساب خود شده باشد و دسترسی لازم را داده باشد، با auth code در query parameter به‌صورت escapeشده به آدرس شما هدایت می‌شود. در غیر‌ این‌ صورت، کاربر با یک query parameter دیگر و با محتوای error به آدرس شما بازمی‌گردد.

مثال: http://redirect.url/somepath?code=<AUTH_CODE>&state=<STATE>

دقت کنید که آدرس <REDIRECT_URL> در پیشخان ثبت شده باشد. در غیر این‌ صورت، بازار از هدایت کاربر به <REDIRECT_URL> جلوگیری می‌کند. برای مشاهده و افزودن یا حذف‌ آدرس‌ها در برنامه‌ی خود، به پیشخان توسعه‌دهندگان، بخش «ورود با بازار» مراجعه کنید:  

 ۴. با ایجاد یک درخواست POST (سمت سرور خود) و مقادیر ورودی زیر می‌توانید به access token و refresh token دست پیدا کنید.

http://account.cafebazaar.ir/api/v0/tokens

Request Body:

grant_type=authorization_code&
code=<AUTH_CODE>&
client_id=<CLIENT_ID>&
client_secret=<SECRET>

Response:

{
   "access_token": <ACCESS_TOKEN>,
   "token_type": <TOKEN_TYPE>,
   "expires_in": 3600,
   "refresh_token": <REFRESH_TOKEN>
}

۵. اکنون برای دسترسی به APIی userinfo به آدرس زیر درخواست GET بزنید و Authorization Header را به صورت زیر بفرستید.

http://account.cafebazaar.ir/api/v0/userinfo

Header:

Authorization: <TOKEN_TYPE> <ACCESS_TOKEN>

مثال:Authorization: Bearer GWObRK06KHLr8pCQzDXJ9hcDdSC3eV

۶. هر access token تنها برای مدت زمان محدودی معتبر است. اگر APIهایی که به Authorization نیاز دارند، پاسخی حاوی کلید error  و مقدار access_denied به شما برگردانند، access token شما منقضی شده است. 

بنابراین، پس از پایان انقضای هر access token، سرور شما می‌تواند با استفاده از refresh code  دریافتی در مرحله ۴، access token جدیدی درخواست کند. برای انجام این کار، به درخواستی از نوع POST به‌ صورت زیر نیاز داریم: 

http://account.cafebazaar.ir/api/v0/tokens/refresh

Request Body:

grant_type=refresh_token&
refresh_token=<REFRESH_TOKEN>

مثال: به کد زیر که برای پایتون (و با استفاده از فلسک به عنوان سرور) نوشته شده، توجه کنید:

import urllib
import flask
import requests
# Step 1
client_id = "CLIENT_ID"
secret = "SECRET"
redirect_url = "http://localhost:8000/"
# Step 2
print(f"https://cafebazaar.ir/user/oauth?redirect_url={redirect_url}"
      f"&client_id={client_id}")
# Step 3
app = flask.Flask(__name__)
@app.route('/')
def serve_hello():
   error = flask.request.args.get("error", '')
   auth_code = flask.request.args.get("code", '')
   if error or auth_code == '':
       return f"error returned {error}"
   # Step 4
   response = requests.post("https://account.cafebazaar.ir/api/v0/tokens", data={
       "grant_type": "authorization_code",
       "code": urllib.parse.unquote(auth_code),
       "client_id": client_id,
       "client_secret": secret,
   }, headers={'Content-Type': 'application/x-www-form-urlencoded'}
   ).json()
   access_token = response["access_token"]
   token_type = response["token_type"]
   refresh_token = response["refresh_token"]
   # Step 5
   response = requests.get("http://account.cafebazaar.ir/api/v0/userinfo", headers={
       "Authorization": f"{token_type} {access_token}"
   }).json()
   if response.get("error", '') == "access_denied":
       # Step 6
       response = requests.post("http://account.cafebazaar.ir/api/v0/tokens/refresh", data={
           "grant_type": "refresh_token",
           "refresh_token": refresh_token,
       }).json()
       access_token = response["access_token"]
       return f"new access token {access_token}"
   account_id = response["account_id"]
   return f"hello {account_id}"
if __name__ == '__main__':
   app.run(host='0.0.0.0', port=8000)

بیشتر بخوانید:

به مطالب ارائه شده چه امتیازی می‌دهید؟
محل نوشتن دیدگاه ...

اگر در مورد محتوا نظر یا پیشنهادی دارید لطفا برای ما بنویسید.

زمان انتشار: ۱۴۰۰-۰۸-۲۷ ۱۱:۴۳

آخرین به‌روزرسانی: ۱۴۰۰-۱۲-۰۷ ۰۵:۵۴