【问题标题】:I want to add a bearer token to my retrofit post request我想在我的改造帖子请求中添加一个不记名令牌
【发布时间】:2021-06-13 11:01:18
【问题描述】:

我有一个将人们注册到平台的应用程序,但每次提交表单数据时都会收到Unauthenticated 的响应。表单是使用 API 提交的,该 API 需要在改造的帮助下为每个发布请求提供一个不记名令牌。我一直与Java脱节。 注意:它只是一个简单的形式。应用中未实施任何身份验证。

我的 ApiClient.java 类

public class ApiClient {

    private static Retrofit getRetrofit(){

        HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
        httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

        OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(httpLoggingInterceptor).build();


        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("xxxxxxxxxxxxx")
                .addConverterFactory(GsonConverterFactory.create())
                .client(okHttpClient)
                .build();

        return retrofit;
    }

    public static UserService getUserService(){
        UserService userService = getRetrofit().create(UserService.class);

        return userService;
    }
}

我的 UserService.java 类

public interface UserService {

    @POST("algonapi/api/enroll_vehicle")
    Call<UserResponse> saveUser(@Body UserRequest userRequest);

}

我的保存用户方法

public void saveUser(UserRequest userRequest){
        Call<UserResponse> userResponseCall = ApiClient.getUserService().saveUser(userRequest);
        userResponseCall.enqueue(new Callback<UserResponse>() {
            @Override
            public void onResponse(Call<UserResponse> call, Response<UserResponse> response) {
                if (response.isSuccessful()){
                    Toast.makeText(MainActivity.this, "Registration Successfull! Click on Reset Form to Start a New Enumeration...", Toast.LENGTH_LONG).show();
                }else {
                    Toast.makeText(MainActivity.this, "Registration Failed!", Toast.LENGTH_LONG).show();
                }
            }

            @Override
            public void onFailure(Call<UserResponse> call, Throwable t) {
                Toast.makeText(MainActivity.this, "Registration Failed!" +t.getLocalizedMessage(), Toast.LENGTH_LONG).show();
            }
        });
    }

我的用户请求

package com.example.xxxxx;

public class UserRequest {
    private String FullName;
    private String StickerNumber;
    private String Address;
    private String Email;
    private String Phone;
    private String Nationality;
    private String State;
    private String LGA;
    private String RC;
    private String DriversLicenseNo;
    private String LicenseIssued;
    private String LicenseExpiry;
    private String VehicleType;
    private String VehicleLicense;
    private String VehicleTyres;
    private String LGAofOperation;
    private String NOKFullName;
    private String NOKAddress;
    private String NOKPhone;
    private String NOKEmail;
    private String NOKNationality;
    private String NOKState;

  
    public String getFullName() {
        return FullName;
    }

    public void setFullName(String fullName) {
        FullName = fullName;
    }

    public String getStickerNumber() {
        return StickerNumber;
    }

    public void setStickerNumber(String stickerNumber) {
        StickerNumber = stickerNumber;
    }

    public String getAddress() {
        return Address;
    }

    public void setAddress(String address) {
        Address = address;
    }

    public String getEmail() {
        return Email;
    }

    public void setEmail(String email) {
        Email = email;
    }

    public String getPhone() {
        return Phone;
    }

    public void setPhone(String phone) {
        Phone = phone;
    }

    public String getNationality() {
        return Nationality;
    }

    public void setNationality(String nationality) {
        Nationality = nationality;
    }

    public String getState() {
        return State;
    }

    public void setState(String state) {
        State = state;
    }

    public String getLGA() {
        return LGA;
    }

    public void setLGA(String LGA) {
        this.LGA = LGA;
    }

    public String getRC() {
        return RC;
    }

    public void setRC(String RC) {
        this.RC = RC;
    }

    public String getDriversLicenseNo() {
        return DriversLicenseNo;
    }

    public void setDriversLicenseNo(String driversLicenseNo) {
        DriversLicenseNo = driversLicenseNo;
    }

    public String getLicenseIssued() {
        return LicenseIssued;
    }

    public void setLicenseIssued(String licenseIssued) {
        LicenseIssued = licenseIssued;
    }

    public String getLicenseExpiry() {
        return LicenseExpiry;
    }

    public void setLicenseExpiry(String licenseExpiry) {
        LicenseExpiry = licenseExpiry;
    }

    public String getVehicleType() {
        return VehicleType;
    }

    public void setVehicleType(String vehicleType) {
        VehicleType = vehicleType;
    }

    public String getVehicleLicense() {
        return VehicleLicense;
    }

    public void setVehicleLicense(String vehicleLicense) {
        VehicleLicense = vehicleLicense;
    }

    public String getVehicleTyres() {
        return VehicleTyres;
    }

    public void setVehicleTyres(String vehicleTyres) {
        VehicleTyres = vehicleTyres;
    }

    public String getLGAofOperation() {
        return LGAofOperation;
    }

    public void setLGAofOperation(String LGAofOperation) {
        this.LGAofOperation = LGAofOperation;
    }

    public String getNOKFullName() {
        return NOKFullName;
    }

    public void setNOKFullName(String NOKFullName) {
        this.NOKFullName = NOKFullName;
    }

    public String getNOKAddress() {
        return NOKAddress;
    }

    public void setNOKAddress(String NOKAddress) {
        this.NOKAddress = NOKAddress;
    }

    public String getNOKPhone() {
        return NOKPhone;
    }

    public void setNOKPhone(String NOKPhone) {
        this.NOKPhone = NOKPhone;
    }

    public String getNOKEmail() {
        return NOKEmail;
    }

    public void setNOKEmail(String NOKEmail) {
        this.NOKEmail = NOKEmail;
    }

    public String getNOKNationality() {
        return NOKNationality;
    }

    public void setNOKNationality(String NOKNationality) {
        this.NOKNationality = NOKNationality;
    }

    public String getNOKState() {
        return NOKState;
    }

    public void setNOKState(String NOKState) {
        this.NOKState = NOKState;
    }
}

【问题讨论】:

    标签: java android retrofit2


    【解决方案1】:

    像这样创建OkHttpClient

      OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(new Interceptor() {
            @NotNull
            @Override
            public Response intercept(@NotNull Chain chain) throws IOException {
                Request request=chain.request().newBuilder()
                        .addHeader("Authorization", "Bearer " + token)
                        .build();
                return chain.proceed(request);
            }
        }).build();
    

    【讨论】:

    • 在getRetrofit(token)方法中发送token。
    • 我该如何实现
    • 调用方法时通过参数发送token。
    【解决方案2】:

    如果您的大部分 https 请求都需要身份验证,那么第一个答案是完美的,但如果您的某些请求需要,那么您可以将标头传递给每个方法。

    public interface UserService {
        @POST("algonapi/api/enroll_vehicle")
        Call<UserResponse> saveUser(
            @Header("Authorization") String token,
            @Body UserRequest userRequest
        );
    }
    

    在调用该方法时,只需将您的令牌与 userRequest 一起传递。

    【讨论】:

    • 更新代码时,我的 saveUser 方法开始出现错误
    • 确保令牌看起来像“Bearer” + 令牌
    • 你能告诉我你是如何调用saveUser方法的代码吗?
    • 我已更新如上所示的代码以显示saveUser 方法
    • 你还在我身边吗?因为我还不知道如何传递该令牌......
    猜你喜欢
    • 1970-01-01
    • 2018-08-24
    • 2022-01-07
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 2017-04-23
    • 2020-08-10
    • 2020-12-11
    相关资源
    最近更新 更多