【问题标题】:Flutter : Edit profile returns 401 'Unauthenticated' but works in POSTMANFlutter:编辑配置文件返回 401 '未验证',但在 POSTMAN 中工作
【发布时间】:2019-08-20 02:07:31
【问题描述】:

我试图根据这个 tutorial 使用颤振和 laravel 编辑我的用户的个人资料。我的注册和登录工作正常。但是,当我尝试编辑它时,总是会返回此错误。

这是我的一些代码;

api.dart

class CallApi {
final String _url = 'http://10.0.2.2:8000/api/';
var token ;

postData(data, apiUrl) async {
var fullUrl = _url + apiUrl + await _getToken();
print(fullUrl);
return await http.post(
    fullUrl,
    body: jsonEncode(data),
    headers: _setHeaders());
}

editData(data, apiUrl) async {

var fullUrl = _url + apiUrl + await _getToken();
return await http.post(
    fullUrl,
    body: jsonEncode(data),
    headers: _setTokenHeaders())
    .then((response) {
  print('Response status : ${response.statusCode}');
  print('Response body : ${response.body}');
});
 }

getData(apiUrl) async {
var fullUrl = _url + apiUrl + await _getToken();
return await http.get(fullUrl, headers: _setHeaders());
 }

_setHeaders() => {
    'Content-type': 'application/json',
    'Accept': 'application/json',
  };

_getToken() async {
SharedPreferences localStorage = await SharedPreferences.getInstance();
var token = localStorage.getString('token');
return '?token=$token';
 }

_setTokenHeaders() =>
  {
    'Content-type': 'application/json',
    'Accept': 'application/json',
    'Authorization': 'Bearer $_getToken()',
  };


}

句柄更新功能

void _handleUpdate() async {
setState(() {
  _isLoading = true;
});



var data = {
  'residency': locationController.text,
  'spouse': spouseController.text,
  'occupation': occupationController.text,
 };

var res = await CallApi().postData(data, 'profile');
 // i've tried both postData and editData which returns the same error
var body = json.decode(res.body); 
print(body);
/*if (body['status'] == true) {
  SharedPreferences localStorage = await SharedPreferences.getInstance();
  localStorage.setString('user_details', json.encode(body['token']));

  Navigator.of(context).pushNamed(Profile.tag);
}*/
}

Logcat

I/flutter ( 2390): {message: Unauthenticated.}

api 通过邮递员正常工作,我检查了我在发布请求中输入的 url 和参数,它们与邮递员的相同,但我仍然不断收到错误。

POSTMAN 的工作原理

  • 注册
  • 登录
  • 退出
  • 更新

在 Flutter 应用上

  • 注册
  • 登录

【问题讨论】:

    标签: http flutter dart


    【解决方案1】:

    您应该只返回token。无需返回字符串查询。

    _getToken() async {
        ...
        return token;
    };
    

    另外,从您的 fullUrl 变量中删除 _getToken()。您需要通过标头发送令牌,而不是通过查询参数。

    已编辑

    您的postData() 函数应该在标题中使用_setTokenHeaders()

    【讨论】:

    • 不幸的是,它返回 404 NotFoundHttpException。这是否意味着我在 laravel 中的 API 路由有问题?
    • Route::group(['middleware' => 'auth:api'], function(){ Route::post('/profile', 'API\UserController@updateProfile');
    • @mirulmadridista 无需在fullUrl 变量中包含await _getToken();
    猜你喜欢
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 2018-02-20
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    相关资源
    最近更新 更多