fix: create token in register
This commit is contained in:
@@ -114,9 +114,12 @@ public function register(Request $request)
|
||||
'email' => 'email|required_without:mobile',
|
||||
'password' => 'string|nullable|required_with: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'])) {
|
||||
$data['mobile'] = MobileNumberHelper::formatMobile($data['mobile']);
|
||||
@@ -129,12 +132,38 @@ public function register(Request $request)
|
||||
return response()->json(['message' => 'Email already exists'], 400);
|
||||
}
|
||||
|
||||
$data['password'] = $data['password'] ?? Hash::make(Str::random(8));
|
||||
$user = User::create($data);
|
||||
|
||||
// Send email verification if email exists
|
||||
// ✅ Check if email can receive a message before creating the user
|
||||
if (isset($data['email'])) {
|
||||
$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([
|
||||
'user_id' => $user->id,
|
||||
'code' => $code,
|
||||
@@ -142,18 +171,20 @@ public function register(Request $request)
|
||||
'created_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([
|
||||
'message' => 'User registered successfully.',
|
||||
'user' => $user,
|
||||
'token' => $token
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public function verifyEmailCode(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
|
||||
Reference in New Issue
Block a user