Home > Mobile >  I am trying to Login and signup in my app but after sign up or log in it shows 403, but if I do post
I am trying to Login and signup in my app but after sign up or log in it shows 403, but if I do post

Time:12-27

api_client.dart:

import 'package:ecommerceapp/utils/app_constants.dart';
import 'package:get/get_connect.dart';
import 'package:get/get_state_manager/get_state_manager.dart';

class ApiClient extends GetConnect implements GetxService {
  late String token;
  final String appBaseUrl;
  late Map<String, String> _mainHeaders;
  ApiClient({required this.appBaseUrl}) {
    baseUrl = appBaseUrl;
    timeout = const Duration(seconds: 30);
    token = AppConstants.TOKEN;
    _mainHeaders = {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer $token',
    };
  }

  Future<Response> getData(String uri) async {
    try {
      Response response = await get(uri);
      return response;
    } catch (e) {
      return Response(statusCode: 1, statusText: e.toString());
    }
  }

  void updateHeader(String token) {
    _mainHeaders = {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer $token',
    };
  }

  Future<Response> postData(String uri, dynamic body) async {
    print("Apli Client Body : "   body.toString());
    try {
      print(_mainHeaders);
      Response response = await post(uri, body, headers: _mainHeaders);
      print(response.toString());
      print("Inside try : "   response.statusCode.toString());
      return response;
    } catch (e) {
      return Response(statusCode: 1, statusText: e.toString());
    }
  }
}

Here in postData method response.statusCode = 403

What should I do? I am using laravel as backend. Also, I have checked the URI and body both are working good.

auth_controller.dart:

// ignore_for_file: public_member_api_docs, sort_constructors_first
import 'package:ecommerceapp/models/response_model.dart';
import 'package:ecommerceapp/models/signup_body_mode.dart';
import 'package:get/get_connect/http/src/response/response.dart';
import 'package:get/get_state_manager/get_state_manager.dart';
import 'package:ecommerceapp/data/repositary/auth_repo.dart';

class AuthController extends GetxController implements GetxService {
  final AuthRepo authRepo;
  AuthController({
    required this.authRepo,
  });

  bool _isLoading = false;
  bool get isLoading => _isLoading;

  Future<ResponseModel> registration(SignUpBody signUpBody) async {
    print("Getting token");
    authRepo.getUserToken();
    _isLoading = true;
    update();
    Response response = await authRepo.registration(signUpBody);
    late ResponseModel responseModel;
    print(response.statusCode.toString());
    if (response.statusCode == 200) {
      print("Hello");
      authRepo.saveUserToken(response.body["token"]);
      responseModel = ResponseModel(true, response.body["token"]);
    } else {
      print("Nikal bsdk");
      responseModel = ResponseModel(false, response.statusText!);
    }

    _isLoading = false;
    update();
    return responseModel;
  }

  Future<ResponseModel> login(String email, String password) async {
    _isLoading = true;
    update();
    Response response = await authRepo.login(email, password);
    print("Response in auth controller : "   response.toString());
    late ResponseModel responseModel;
    print("Status Cod ein controller : "   response.statusCode.toString());
    print(response.statusCode.toString());
    if (response.statusCode == 200) {
      print("Hello");
      authRepo.saveUserToken(response.body["token"]);
      responseModel = ResponseModel(true, response.body["token"]);
    } else {
      print("Nikal bsdk");
      responseModel = ResponseModel(false, response.statusText!);
    }

    _isLoading = false;
    update();
    return responseModel;
  }

  void saveUserNumberAndPassword(String number, String password) async {
    authRepo.saveUserNumberAndPassword(number, password);
  }
}

auth_repo.dart:

// ignore_for_file: public_member_api_docs, sort_constructors_first
import 'package:ecommerceapp/models/signup_body_mode.dart';
import 'package:ecommerceapp/utils/app_constants.dart';
import 'package:get/get_connect.dart';
import 'package:shared_preferences/shared_preferences.dart';

import 'package:ecommerceapp/data/api/api_client.dart';

class AuthRepo {
  final ApiClient apiClient;
  final SharedPreferences sharedPreferences;
  AuthRepo({
    required this.apiClient,
    required this.sharedPreferences,
  });

  Future<Response> registration(SignUpBody signUpBody) async {
    // print(signUpBody.toJson());
    return await apiClient.postData(
        AppConstants.REGISTRATION_URI, signUpBody.toJson());
  }

  Future<String> getUserToken() async {
    print("Token : "   sharedPreferences.getString(AppConstants.TOKEN)!);
    return await sharedPreferences.getString(AppConstants.TOKEN) ?? "None";
  }

  Future<Response> login(String email, String password) async {
    // print(signUpBody.toJson());
    print("Inside Auth Repo :"   email   " "   password);
    return await apiClient.postData(
        AppConstants.LOGIN_URI, {"email": email, "password": password});
  }

  Future<bool> saveUserToken(String token) async {
    apiClient.token = token;

    apiClient.updateHeader(token);
    // print("token"   token);
    return await sharedPreferences.setString(AppConstants.TOKEN, token);
  }

  Future<void> saveUserNumberAndPassword(String number, String password) async {
    try {
      await sharedPreferences.setString(AppConstants.PHONE, number);
      await sharedPreferences.setString(AppConstants.PASSWORD, password);
    } catch (e) {
      throw e;
    }
  }
}

I tried so many things like printing data everywhere to find where is an actual bug I found it in postdata method.

This is the error:

flutter: Forbidden 

CodePudding user response:

Here I done very silly mistake and i found it. while Creating UserModel I mistakenly write "passwor" instead of "password"

CodePudding user response:

In your Server Side(API-Server End) Add this 3 Line:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST');
header("Access-Control-Allow-Headers: X-Requested-With");

Your Problem will be solved

  • Related