احمد
5 سال پیش توسط احمد مطرح شد
3 پاسخ

اهراز هویت پیامکی

سلام . من میخوام داخل پروژم با پیامک فقط بشه ثبت نام و ورود کرد بعدش کاربر اقدام به ویرایش پروفایل کاربری و سایر مشخصاتش بکنه.
کسی میتونه راهنماییم کنه یا بهم لینک بده ؟ فکر کنم تو یکی از دوره های راکت گفته شده ولی من ازین دوره فقط اون دو قسمت احراز هویت رو میخوام و به صرفه نیست برام کل دوره رو بخرم


ثبت پرسش جدید
علیرضا اصلانی
تخصص : Web and Mobile Developer
@aaslani 5 سال پیش آپدیت شد
0

این کدای روشی که خودم تو لاراول استفاده کردم

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" استفاده کردم


mahdi khanzadi
تخصص : backend developer at Snapp mar...
@khanzadimahdi 5 سال پیش مطرح شد
0

برای ارسال پیامک میتونید از پکیج زیر استفاده کنید:

https://github.com/tzsk/sms

درایورهای smsir و کاوه نگار و ملی پیامک در حال حاضر ساپورت میشه.


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 5 سال پیش مطرح شد
0

سلام ، به نظرم کل دوره واقعا عالیه و میتونه برات ایده ال باشه @ahmadnaderi2012
بحث احراز هویت هم بارها تویی تایپیک های مختلف دوستان پرسیدن با یک سرچ میتونی برسی بهش

فقط یک نکته تویی احراز هویت تویی کنترلر Auth شما میتونی کدها رو بازنویسی کنی و تویی صف ها میتونی کد ارسال پیامکت رو بنویسی و برای استفاده از سیستم پیامکی میتونی از کاوه نگار استفاده کنی. مستندات هم داره.


علیرضا اصلانی
تخصص : Web and Mobile Developer
@aaslani 5 سال پیش آپدیت شد
0

این کدای روشی که خودم تو لاراول استفاده کردم

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" استفاده کردم


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام