fix: create token in register

This commit is contained in:
2025-09-08 19:30:57 +03:30
parent 01813c8d47
commit 7e5f0d0428
+38 -7
View File
@@ -114,9 +114,12 @@ public function register(Request $request)
'email' => 'email|required_without:mobile', 'email' => 'email|required_without:mobile',
'password' => 'string|nullable|required_with:email', 'password' => 'string|nullable|required_with:email',
'mobile' => ['string', new MobileNumber, 'nullable', 'required_without:email'], 'mobile' => ['string', new MobileNumber, 'nullable', 'required_without:email'],
'fcm_token' => 'string|nullable' 'fcm_token' => 'string|nullable',
'package_name' => 'string|required'
]); ]);
$packageNameValue = $data['package_name'];
unset($data['package_name']);
if (isset($data['mobile'])) { if (isset($data['mobile'])) {
$data['mobile'] = MobileNumberHelper::formatMobile($data['mobile']); $data['mobile'] = MobileNumberHelper::formatMobile($data['mobile']);
@@ -129,12 +132,38 @@ public function register(Request $request)
return response()->json(['message' => 'Email already exists'], 400); return response()->json(['message' => 'Email already exists'], 400);
} }
$data['password'] = $data['password'] ?? Hash::make(Str::random(8)); // ✅ Check if email can receive a message before creating the user
$user = User::create($data);
// Send email verification if email exists
if (isset($data['email'])) { if (isset($data['email'])) {
$code = rand(1000, 9999); $code = rand(1000, 9999);
try {
// Try sending email
\Mail::to($data['email'])->send(new \App\Mail\VerifyEmailCodeMail($code));
} catch (\Exception $e) {
return response()->json([
'message' => 'لطفا آدرس ایمیل خود را بررسی کنید و مجدد تلاش کنید',
], 400);
}
}
// Hash password
$data['password'] = isset($data['password'])
? Hash::make($data['password'])
: Hash::make(Str::random(8));
// Create user only if email sending didn't fail
$user = User::create($data);
// Attach package
if ($packageName = PackageName::where('name', $packageNameValue)->first()) {
$user->packageNames()->attach($packageName->id, [
'tries' => $packageName->tries,
'fcm_token' => $data['fcm_token'] ?? null,
]);
}
// Save email verification code after user is created
if (isset($data['email'])) {
\DB::table('email_verifications')->insert([ \DB::table('email_verifications')->insert([
'user_id' => $user->id, 'user_id' => $user->id,
'code' => $code, 'code' => $code,
@@ -142,18 +171,20 @@ public function register(Request $request)
'created_at' => now(), 'created_at' => now(),
'updated_at' => now(), 'updated_at' => now(),
]); ]);
\Mail::to($user->email)->send(new \App\Mail\VerifyEmailCodeMail($code));
} }
// Create token
$token = $user->createToken('token', $user->is_admin ? ['admin'] : ['user'])->plainTextToken;
return response()->json([ return response()->json([
'message' => 'User registered successfully.', 'message' => 'User registered successfully.',
'user' => $user, 'user' => $user,
'token' => $token
]); ]);
} }
public function verifyEmailCode(Request $request) public function verifyEmailCode(Request $request)
{ {
$request->validate([ $request->validate([