سلام . من میخوام داخل پروژم با پیامک فقط بشه ثبت نام و ورود کرد بعدش کاربر اقدام به ویرایش پروفایل کاربری و سایر مشخصاتش بکنه.
کسی میتونه راهنماییم کنه یا بهم لینک بده ؟ فکر کنم تو یکی از دوره های راکت گفته شده ولی من ازین دوره فقط اون دو قسمت احراز هویت رو میخوام و به صرفه نیست برام کل دوره رو بخرم
این کدای روشی که خودم تو لاراول استفاده کردم
databasemigrations
/**
* Run the migrations.
*
* @return void
*/
public function up() {
Schema::create('users', function(Blueprint $table) {
$table->increments('id');
$table->string('phone_number')->unique();
$table->string('name')->nullable();
$table->string('family')->nullable();
$table->string('image')->nullable();
$table->string('email')->unique()->nullable();
$table->string('password')->nullable();
$table->string('verify_code', 5);
$table->timestamp('email_verified_at')->nullable();
$table->rememberToken();
$table->timestamps();
});
}
User مدل
<?php
namespace App;
use IlluminateNotificationsNotifiable;
use IlluminateContractsAuthMustVerifyEmail;
use IlluminateFoundationAuthUser as Authenticatable;
use TymonJWTAuthContractsJWTSubject;
class User extends Authenticatable implements JWTSubject {
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'family', 'email', 'password', 'phone_number', 'image', 'verify_code'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* Get the identifier that will be stored in the subject claim of the JWT.
*
* @return mixed
*/
public function getJWTIdentifier() {
return $this->getKey();
}
/**
* Return a key value array, containing any custom claims to be added to the JWT.
*
* @return array
*/
public function getJWTCustomClaims() {
return [];
}
}
AuthController
<?php
namespace AppHttpControllersApi1;
use AppUser;
use IlluminateHttpRequest;
use AppHttpControllersController;
use IlluminateHttpResponse;
use IlluminateSupportFacadesAuth;
use IlluminateSupportFacadesHash;
class AuthController extends Controller {
public function start(Request $request) {
$this->validate($request, [
'phone_number' => ['required', 'min:10', 'max:10']
]);
$phone_number = $request->phone_number;
$user = User::where('phone_number', $phone_number)->first();
$verify_code = rand(11111, 99999);
if(!$user) {
User::create([
'phone_number' => $phone_number,
'verify_code' => $verify_code
]);
//TODO: send sms verify code
return response()->json([
'data' => [
'phone_number' => $phone_number,
]
]);
}
$user->update([
'verify_code' => $verify_code
]);
//TODO: send sms verify code
return response()->json([
'data' => [
'phone_number' => $phone_number
]
]);
}
public function verify(Request $request, $phoneNumber) {
$this->validate($request, [
'verify_code' => ['required', 'min:5', 'max:5']
]);
$user = User::where('phone_number', $phoneNumber)->first();
if($user->verify_code === $request->verify_code) {
$token = Auth('api')->login($user);
return response()->json([
'data' => [
'api_token' => $token,
'has_password' => $user->password != null,
'is_new_user' => !$user->name
]
]);
}
return response()->json([
'data' => [
'messages' => 'کد فعالسازی نامعتبر است'
]
], Response::HTTP_UNAUTHORIZED);
}
public function register(Request $request) {
$this->validate($request, [
'name' => ['required'],
'family' => ['required']
]);
Auth('api')->user()->update([
'name' => $request->name,
'family' => $request->family
]);
return response()->json([
'data' => [
'registered' => true
]
]);
}
public function checkPassword(Request $request) {
$this->validate($request, [
'password' => ['required']
]);
if(Hash::check($request->password, Auth('api')->user()->password)) {
return response()->json([
'data' => [
'verify_password' => true
]
]);
}
return response()->json([
'data' => [
'verify_password' => false
]
], Response::HTTP_UNAUTHORIZED);
}
}
اون قسمت که نوشتم TODO: send sms verify code باید با وب سرویس پیامکی که تهیه کردی مقدار $verify_code رو بفرستی به شماره کاربر که داخل $phone_number ذخیره شده
اینم route هاش
<?php
use Illuminate\Http\Request;
Route::prefix('v1')->namespace('Api\v1')->group(function() {
$this->post('start', 'AuthController@start');
$this->post('verify/{phoneNumber}', 'AuthController@verify');
$this->middleware('jwt.auth')->group(function() {
$this->post('check-password', 'AuthController@checkPassword');
$this->post('register', 'AuthController@register');
});
});
برای ساخت api token هم از "tymon/jwt-auth": "1.0.0-rc.3" استفاده کردم
برای ارسال پیامک میتونید از پکیج زیر استفاده کنید:
درایورهای smsir و کاوه نگار و ملی پیامک در حال حاضر ساپورت میشه.
سلام ، به نظرم کل دوره واقعا عالیه و میتونه برات ایده ال باشه @ahmadnaderi2012
بحث احراز هویت هم بارها تویی تایپیک های مختلف دوستان پرسیدن با یک سرچ میتونی برسی بهش
فقط یک نکته تویی احراز هویت تویی کنترلر Auth شما میتونی کدها رو بازنویسی کنی و تویی صف ها میتونی کد ارسال پیامکت رو بنویسی و برای استفاده از سیستم پیامکی میتونی از کاوه نگار استفاده کنی. مستندات هم داره.
این کدای روشی که خودم تو لاراول استفاده کردم
databasemigrations
/**
* Run the migrations.
*
* @return void
*/
public function up() {
Schema::create('users', function(Blueprint $table) {
$table->increments('id');
$table->string('phone_number')->unique();
$table->string('name')->nullable();
$table->string('family')->nullable();
$table->string('image')->nullable();
$table->string('email')->unique()->nullable();
$table->string('password')->nullable();
$table->string('verify_code', 5);
$table->timestamp('email_verified_at')->nullable();
$table->rememberToken();
$table->timestamps();
});
}
User مدل
<?php
namespace App;
use IlluminateNotificationsNotifiable;
use IlluminateContractsAuthMustVerifyEmail;
use IlluminateFoundationAuthUser as Authenticatable;
use TymonJWTAuthContractsJWTSubject;
class User extends Authenticatable implements JWTSubject {
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'family', 'email', 'password', 'phone_number', 'image', 'verify_code'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* Get the identifier that will be stored in the subject claim of the JWT.
*
* @return mixed
*/
public function getJWTIdentifier() {
return $this->getKey();
}
/**
* Return a key value array, containing any custom claims to be added to the JWT.
*
* @return array
*/
public function getJWTCustomClaims() {
return [];
}
}
AuthController
<?php
namespace AppHttpControllersApi1;
use AppUser;
use IlluminateHttpRequest;
use AppHttpControllersController;
use IlluminateHttpResponse;
use IlluminateSupportFacadesAuth;
use IlluminateSupportFacadesHash;
class AuthController extends Controller {
public function start(Request $request) {
$this->validate($request, [
'phone_number' => ['required', 'min:10', 'max:10']
]);
$phone_number = $request->phone_number;
$user = User::where('phone_number', $phone_number)->first();
$verify_code = rand(11111, 99999);
if(!$user) {
User::create([
'phone_number' => $phone_number,
'verify_code' => $verify_code
]);
//TODO: send sms verify code
return response()->json([
'data' => [
'phone_number' => $phone_number,
]
]);
}
$user->update([
'verify_code' => $verify_code
]);
//TODO: send sms verify code
return response()->json([
'data' => [
'phone_number' => $phone_number
]
]);
}
public function verify(Request $request, $phoneNumber) {
$this->validate($request, [
'verify_code' => ['required', 'min:5', 'max:5']
]);
$user = User::where('phone_number', $phoneNumber)->first();
if($user->verify_code === $request->verify_code) {
$token = Auth('api')->login($user);
return response()->json([
'data' => [
'api_token' => $token,
'has_password' => $user->password != null,
'is_new_user' => !$user->name
]
]);
}
return response()->json([
'data' => [
'messages' => 'کد فعالسازی نامعتبر است'
]
], Response::HTTP_UNAUTHORIZED);
}
public function register(Request $request) {
$this->validate($request, [
'name' => ['required'],
'family' => ['required']
]);
Auth('api')->user()->update([
'name' => $request->name,
'family' => $request->family
]);
return response()->json([
'data' => [
'registered' => true
]
]);
}
public function checkPassword(Request $request) {
$this->validate($request, [
'password' => ['required']
]);
if(Hash::check($request->password, Auth('api')->user()->password)) {
return response()->json([
'data' => [
'verify_password' => true
]
]);
}
return response()->json([
'data' => [
'verify_password' => false
]
], Response::HTTP_UNAUTHORIZED);
}
}
اون قسمت که نوشتم TODO: send sms verify code باید با وب سرویس پیامکی که تهیه کردی مقدار $verify_code رو بفرستی به شماره کاربر که داخل $phone_number ذخیره شده
اینم route هاش
<?php
use Illuminate\Http\Request;
Route::prefix('v1')->namespace('Api\v1')->group(function() {
$this->post('start', 'AuthController@start');
$this->post('verify/{phoneNumber}', 'AuthController@verify');
$this->middleware('jwt.auth')->group(function() {
$this->post('check-password', 'AuthController@checkPassword');
$this->post('register', 'AuthController@register');
});
});
برای ساخت api token هم از "tymon/jwt-auth": "1.0.0-rc.3" استفاده کردم
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟