Вход пользователя с неверными данными в Flutter / Laravel API - PullRequest
0 голосов
/ 28 мая 2020
• 1000
login(String email, String password) async{
var url = '$serverUrl/login';
final response = await http.post(url,
    headers: {
      'Accept':'application/json'
    },
    body: {
      "email":"$email",
      "password":"$password"
    }
);

status = response.body.contains('error');

var data = json.decode(response.body);
if(status){
  print('data : ${data["error"]}');
}else{
  print('data : ${data["token"]}');
  _save(data["token"]);
}
}

Но когда я создаю приложение Flutter, оно позволяет войти в систему с неправильными именами пользователя или паролем и перейти на экран панели управления.

Это код страницы входа

    class LoginPageState extends State<LoginPage>{

  DataBaseHelper dataBaseHelper = new DataBaseHelper();

  String msgStatus;

  final TextEditingController _emailController = new TextEditingController();
  final TextEditingController _passwordController = new TextEditingController();

  _onPressed(){
    setState(() {
      if(_emailController.text.trim().toLowerCase().isNotEmpty &&
      _passwordController.text.trim().isNotEmpty){
        dataBaseHelper.login(_emailController.text.trim().toLowerCase(),
            _passwordController.text.trim()).whenComplete((){
          if(dataBaseHelper.status){
            _showDialog();
            msgStatus = 'Check email or password';
            debugPrint("${_emailController.text.trim().toLowerCase()}  ${_passwordController.text.trim()}" );
          }else{
            Navigator.pushReplacementNamed(context, '/dashboard');
        }
        });
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return MaterialApp(
      title: 'login',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Login'),
        ),
        body: Container(),      
      ),
    );
  }

  void _showDialog(){
    showDialog(
        context:context,
        builder : (BuildContext context){
          return AlertDialog(
            title: Text('Failed'),
            content: Text('Check your email or password'),
            actions: [
              RaisedButton(
                onPressed: (){
                  Navigator.of(context).pop();
                },
                child: Text('Close',
                ),
              ),
            ],
          );
        });
  }
}

Laravel сторона:

class APILoginController extends Controller
{
    //
    public function login(Request $request){
        $validator = Validator::make($request -> all(),[
            'email' => 'required|string|email|max:255',
            'password' =>'required'
        ]);
    if($validator->fails()){
        return response()->json($validator->errors());
    }

    $credentials = $request->only('email', 'password');
    try {
        if(! $token = JWTAuth::attempt($credentials)
        ){
            return response()->json(['error'=>'invalid username or password'], [401]);
        }
    } catch (JWTException $e) {
        //throw $th;
        return response()->json(['error'=>'could not create token'], [500]);
    }

    return response()->json(compact('token'));

}

}

...