• 1403/10/27

احراز هویت با jetstream و passport و sanctum - 2 :

سلام آقای خسروجردی، خسته نباشید.

1. چجوری می تونیم personal token و password token رو بوسیله متد createToken درست کنیم؟ چون متد createToken فقط personal token درست میکنه. آیا راهی هست که بشه personal token و password token رو از طریق کد درست کرد اگه کدش رو بگید ممنون میشم.

2. من دارم front یک اپلیکیشن موبایل رو با react native و با پلتفرم expo و backend (api) اون رو با لاراول می نویسم : آیا عکس هایی که داخل برنامه موبایل انتخاب می کنیم و اون رو ذخیره می کنیم داخل قسمت backend (منظورم در لاراول و در پوشه public هست) ذخیره میشن یا جای دیگه؟

  • 1403/10/28
  • ساعت 17:53

سلام وقت بخیر

 

 

متد createToken از پکیج Passport لاراول برای تولید توکن استفاده میشه. با این حال، به صورت پیش‌فرض، این متد فقط personal access token تولید میکنه. برای ایجاد password token، باید از روش دیگری استفاده کنید:

کد نمونه برای تولید password token:

برای ایجاد password token، میتونید یک درخواست مستقیم به مسیر /oauth/token بفرستید. مثال:

use Illuminate\Support\Facades\Http;

$response = Http::asForm()->post('http://your-app.com/oauth/token', [
    'grant_type' => 'password',
    'client_id' => 'client_id_here',
    'client_secret' => 'client_secret_here',
    'username' => 'user@example.com',
    'password' => 'password_here',
    'scope' => '',
]);

$token = $response->json();

برای personal token:

از createToken استفاده کنید:

$user = User::find(1); // یا کاربر جاری
$token = $user->createToken('Personal Access Token')->accessToken;

۲. ذخیره‌سازی تصاویر 

 

 

وقتی تصویری از اپلیکیشن موبایل به سرور آپلود میشه، میتونید اون رو در مسیر دلخواه ذخیره کنید. برای مثال، در پوشه public یا هر جای دیگری.

ذخیره در پوشه public:

if ($request->hasFile('image')) {
    $image = $request->file('image');
    $path = $image->store('images', 'public'); // ذخیره در storage/app/public/images
    return response()->json(['path' => $path]);
}

 

 


  • 1403/10/28
  • ساعت 22:08

1. توکن password و client

برای ایجاد توکن از نوع پسورد، client_id و client_secret رو چجوری باید از طریق کد بدست بیاریم؟ 

مدت زمان انقضا رو چجوری باید برای توکن password و personal زمانی که داریم ایجادش می کنیم مشخص کنیم چون نمی خوام پیش فرض خودش 1 سال باشه؟

اگه بخوایم token$ که زمان login کاربر ایجاد شد در زمان logout کاربر از جدول 

oauth_access_tokens حذف کنیم باید چیکار کنیم؟

2. ذخیره تصویر

من کدی که گفتید داخل controller در قسمت backend تست کردم ولی داخل

 request->file(image)$  که لاگ گرفتم خالی هست و داخل 

request->image$ مسیر عکس وجود داره ولی این مسیر رو از طریق کد

$image->store('images', 'public');

می خوام داخل پوشه public ذخیره کنم هیچ عکسی ذخیره نمیکنه. ولی داخل دیتابیس mysql مسیر ذخیره میشه. 

مسیر عکسی که می خوام ذخیره کنم این هست:

file:///data/user/0/host.exp.exponent/cache/ExperienceData/%2540anonymous%252FDoneWithIt-c25ea336-b956-454e-a451-87a967556615/ImagePicker/1b3c11c8-c3aa-4ca3-be54-b0dc2849d067.jpeg


  • 1403/11/01
  • ساعت 13:59

توکن Password و Client

الف) دریافت client_id و client_secret:
از جدول oauth_clients مقادیر را بخوانید:

$client = DB::table('oauth_clients')->where('password_client', true)->first();
$client_id = $client->id;
$client_secret = $client->secret;

ب) تنظیم مدت زمان انقضا:
در AuthServiceProvider مقدار زمان را مشخص کنید:

Passport::tokensExpireIn(now()->addDays(30)); // توکن 30 روزه
Passport::refreshTokensExpireIn(now()->addDays(60)); // رفرش توکن 60 روزه

ج) حذف توکن در Logout:

Auth::user()->token()->delete(); // حذف توکن جاری از دیتابیس

ذخیره تصویر
چون مسیر تصویر مستقیم است، باید با file_get_contents بخوانید و سپس ذخیره کنید:

$imagePath = $request->image; // مسیر فایل
$imageContents = file_get_contents($imagePath); // خواندن فایل
$imageName = 'images/' . uniqid() . '.jpeg'; // نام فایل
Storage::disk('public')->put($imageName, $imageContents); // ذخیره در public
return response()->json(['path' => $imageName]);

این کدها باید مشکل شما را برطرف کنند.


  • 1403/11/05
  • ساعت 11:23

سلام آقای خسروجردی، خسته نباشید.

ذخیره تصویر

خیلی ممنون با این کد مشکلم در ذخیره تصویر از قسمت فرانت react native expo به پوشه public داخل api بک اند laravel حل شد.

متاسفانه الان مشکل در خواندن تصویر از پوشه public داخل api بک اند laravel به قسمت فرانت react native expo بوجود اومده:

این کد قسمت react native منه:

آدرس سرور لاراول: 192.168.43.100:8000

 


  • 1403/11/07
  • ساعت 12:50

مشکل در کد بالا این است که نام متغیر image درست نیست. باید از source استفاده کنید. درستش اینه:

<Image
  source={{ uri: `http://192.168.43.100:8000/${imageUrl}` }}
  style={{ width: 200, height: 200 }}
/>

همچنین مطمئن بشید که imageUrl نام صحیح فایل یا مسیر تصویرهست


  • 1403/11/10
  • ساعت 22:17

مشکل خواندن تصویر هم حل شد.

الان یک مشکلی که دارم اینه که وقتی از قسمت front اپلیکیشن build می گیرم با دستور

 eas build -p android --preview

 و داخل حسابم در سایت expo.dev بارگذاری میشه و با دستور

 eas build:run -p android 

نسخه apk که در سایت expo.dev بارگذاری شده در emulator ام نصب میشه، اپلیکشنم قسمت login اش کار نمیکنه و فکر میکنم قسمت خواندن api که با استفاده از پکیج apisauce نوشتم کار نمیکنه در صورتی که وقتی ازش build نمیگیرم و با دستور npx expo start قسمت front ام رو run می کنم و داخل emulator با expo go میارمش بالا درست کار میکنه.

نمیدونم علتش چیه؟


  • 1403/11/11
  • ساعت 14:18

آقای خسروجردی مشکل login حل شد باید در فایل app.json کد زیر رو اضافه کنیم تا مشکل حل بشه:

"usesCleartextTraffic": true

 

{
  "expo": {
    "plugins": [
      [
        "expo-build-properties",
        {
          "android": {
            "usesCleartextTraffic": true
          },
          "ios": {}
        }
      ],
    ]
  }
}

بازم خیلی ممنون از جوابتون


  • 1403/11/11
  • ساعت 15:39

عالی

زنده باشید


  • 1403/11/12
  • ساعت 03:03

ببخشید آقای خسروجردی، کدی که گفتم مشکل login رو حل کرد ولی متاسفانه این راه حل برای متد get api هست و برای متد post api هنوز این مشکل وجود داره.

داخل اینترنت که جستجو کردم گفته برای build development با eas باید درخواست های api با https باشه نه با http.

ولی من دارم الان داخل local اپلیکیشن ام رو می نویسم و داخل emulator تست میکنم و روی هاست بارگذاری نکردم.

تا الان داخل emulator با expo go که تست میگرفتم همه چیز درست کار میکرد.

ولی برای استفاده از پکیج expo-notification باید حتما محیط توسعه (build development) باشه.

حالا به نظرتون باید چیکار کنم که تمام درخواست های api (get, post, put, delete) رو داخل emulator که build میگیرم با دستور

eas build -p android --profile preview

و فایل apk که داخل emulator نصب میشه درست کار کنن؟


  • 1403/11/12
  • ساعت 22:34

اگر مشکل فقط در POST است، ابتدا usesCleartextTraffic را بررسی کنید، سپس ngrok را تست کنید.
اگر POST و GET هر دو مشکل دارند، احتمالاً مشکل HTTPS است و باید ngrok یا یک هاست تستی داشته باشید.


  • 1403/11/13
  • ساعت 04:35

1. ngrok چیه و چه کاربردی داره؟ 

2. الان یه هاست تستی گرفتم، متد post کار کرد  و دیدم که مشکل از پکیج expo-notification هست و وقتی که اون رو import میکنم و getPushNotificationToken رو از روش صدا میزنم و به متد post میدم که داخل دیتابیس هاست ذخیره کنه، اون رو ذخیره نمیکنه. 

ولی وقتی یک رشته تستی به متد post میدم اون رو ذخیره میکنه در دیتابیس هاست. 

فکر میکنم پکیج expo-notification مشکل داره و deprecated شده باشه. 

نظر شما چیه؟ من نمیدونم چرا Expo برای react Native اینجوریه و چند تا از پکیج ها شو میبینم که میگه deprecated شدن. در صورتی که لاراول اصلا اینجوری نیست و فقط update میده. 

آقای خسروجردی شما خودتون برای react Native از چه فریمورکی استفاده میکنین که پکیج هاش اینجوری نباشن و تمام نیازها رو برای ساختن اپلیکیشن موبایل Android و ios برآورده میکنن؟ 

3. چجوری میشه فایل apk که تولید میشه رو debug کرد چون واقعا نمیشه هر بار Build گرفت و تست کرد


  • 1403/11/14
  • ساعت 16:14

این سوالاتون دیگه کاملا مربوط میشه به react native

باید از متخصص react native بپرسید 


  • 1403/11/14
  • ساعت 21:01

آقای خسروجردی باید منو ببخشید بخاطر این سوالاتم. 

1. در مورد personal و password توکن اگه بخوایم هر وقت کاربر لاگین کرد براش توکن ایجاد کنیم و وقتی logout کرد توکن ایجاد شده رو از جدول حذف کنیم، جدول توکن ها در دیتابیس خیلی زود شماره id هاش بالا میره و پر میشه با اینکه نوع ش big Increment هست و اینطوری باعث نمیشه که نیاز بشه جدول رو یکبار delete کنیم و دوباره بسازیم. اگه بخوایم اینکار رو بکنیم چطوری باید انجام بدیم از طریق کد، چون داریم از پکیج passport استفاده می کنیم؟ 

2. میدونم داخل اینترنت منابع زیادی هست ولی آیا سایت یا منبع خوبی می‌شناسید که بتونم جواب این سوالاتم در مورد react Native رو پیدا کنم؟ 


  • 1403/11/16
  • ساعت 02:11

از chatgpt کمک بگیرید


  • 1403/11/16
  • ساعت 20:04

ببخشید منظورتون رو نفهمیدم، ارتباط chatgpt با سوال اول و دوم من داخل چیه؟


  • 1403/11/17
  • ساعت 17:15

chatgpt هوش مصنوعی هست که میتونید ازش سوال بپرسید


logo-enamadlogo-samandehi