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