I make my first app with API. I am beginner in Laravel and php.
I have this migration:
Schema::create('users', function (Blueprint $table) { $table->bigIncrements('id'); $table->bigInteger('company_id')->unsigned(); $table->foreign('company_id')->references('id')->on('companies')->onDelete('cascade'); $table->string('name'); $table->string('surname')->nullable(); $table->string('phone')->nullable(); $table->mediumText('description')->nullable(); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->string('api_token', 80) ->unique() ->nullable() ->default(null); $table->string('menuroles'); $table->boolean('status')->default(false); $table->string('slug', 160); $table->rememberToken(); $table->timestamps(); $table->softDeletes(); });
and this is my AuthController:
class AuthController extends Controller { /** * Create a new AuthController instance. * * @return void */ public function __construct() { $this->middleware('auth:api', ['except' => ['login', 'register']]); } /** * Register new user. * * @return IlluminateHttpJsonResponse */ public function register(Request $request){ $validate = Validator::make($request->all(), [ 'name' => 'required', 'email' => 'required|email|unique:users', 'password' => 'required|min:4|confirmed', ]); if ($validate->fails()){ return response()->json([ 'status' => 'error', 'errors' => $validate->errors() ], 422); } // $user = new User; // $user->name = $request->name; // $user->email = $request->email; // $user->password = bcrypt($request->password); // $user->status = 'Active'; // $user->save(); return response()->json(['status' => 'success'], 200); } /** * Get a JWT via given credentials. * * @return IlluminateHttpJsonResponse */ public function login(Request $request) { $credentials = request(['email', 'password']); if (! $token = auth()->attempt($credentials)) { return response()->json(['error' => 'Unauthorized'], 401); } return $this->respondWithToken($token, $request->email); } /** * Log the user out (Invalidate the token). * * @return IlluminateHttpJsonResponse */ public function logout() { auth()->logout(); return response()->json(['message' => 'Successfully logged out']); } /** * Refresh a token. * * @return IlluminateHttpJsonResponse */ public function refresh() { return $this->respondWithToken(auth()->refresh()); } /** * Get the token array structure. * * @param string $token * * @return IlluminateHttpJsonResponse */ protected function respondWithToken($token, $email) { $user = User::select('menuroles as roles')->where('email', '=', $email)->first(); return response()->json([ 'access_token' => $token, 'token_type' => 'bearer', 'expires_in' => auth()->factory()->getTTL() * 60, 'roles' => $user->roles ]); }
Login work’s fine. In addition to the login and password, I need to verify the status column. If status = 1 – then login is possible. How can I do this?
Please help me 🙂 How can I make it?
Advertisement
Answer
You can add more scopes to user auth attempt
if (Auth::attempt(['email' => $email, 'password' => $password, 'status' => 1])) { // Authentication was successful... }