如何使用改装从Android创建护照令牌 发送到Laravel 5.7中的API,是否有比护照更好的身份验证选择



Android改造应该创建护照令牌并发送到laravel rest api,并添加到数据库中。有没有比护照更好的选择,可以在laravel5.7和android中使用。

你不能在安卓中创建令牌,你只需要发送你的信息和在注册控制器

  $this->validator($request->all())->validate();
    event(new Registered($user = $this->create($request->all())));
    $client = Client::where('password_client', 1)->first();

    $request->request->add([
        'grant_type'    => 'password',
        'client_id'     => $client->id,
        'client_secret' => $client->secret,
        'username'      => $request->all()['email'],
        'password'      => $request->all()['password'],
        'scope'         => null,
    ]);
    // Fire off the internal request.
    $token = Request::create(
        'oauth/token',
        'POST'
    );
    return Route::dispatch($token);

然后它会access_tokenexpired_at返回给您.

在安卓中,您需要将令牌保存在共享首选项中

public class TokenManager {
private SharedPreferences prefs;
private SharedPreferences.Editor editor;
private static TokenManager INSTANCE = null;
private TokenManager(SharedPreferences prefs){
    this.prefs = prefs;
    this.editor = prefs.edit();
}
public static synchronized TokenManager getInstance(SharedPreferences prefs){
    if(INSTANCE == null){
        INSTANCE = new TokenManager(prefs);
    }
    return INSTANCE;
}
public void saveToken(AccessToken token){
    editor.putString("ACCESS_TOKEN", token.getAccess_token()).commit();
    editor.putString("REFRESH_TOKEN", token.getRefresh_token()).commit();
}
public void deleteToken(){
    editor.remove("ACCESS_TOKEN").commit();
    editor.remove("REFRESH_TOKEN").commit();
}
public AccessToken getToken(){
    AccessToken token = new AccessToken();
    token.setAccess_token(prefs.getString("ACCESS_TOKEN", null));
    token.setRefresh_token(prefs.getString("REFRESH_TOKEN", null));
    return token;
}

在"改造建造师类"中

public static <T> T createServiceWithAuth(Class<T> service, final TokenManager tokenManager) {
    OkHttpClient newClient = client.newBuilder().addInterceptor(new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();
            Request.Builder builder = request.newBuilder();
            if (tokenManager.getToken().getAccess_token() != null) {
                builder.addHeader("Authorization", "Bearer " + tokenManager.getToken().getAccess_token());
            }
            request = builder.build();
            return chain.proceed(request);
        }
    }).authenticator(CustomAuthenticator.getInstance(tokenManager)).build();
    Retrofit newRetrofit = retrofit.newBuilder().client(newClient).build();
    return newRetrofit.create(service);
}

在您的活动中

  TokenManager tokenManager;
  Routes service;
     service = RetrofitBuilder.createServiceWithAuth(Routes.class, tokenManager);
 tokenManager = TokenManager.getInstance(getSharedPreferences("prefs", MODE_PRIVATE));

然后检查是否不为空

if (tokenManager.getToken().getAccess_token() != null) {
        startActivity(new Intent(LoginActivity.this, MenuDrawerProfileActivity.class));
        finish();
    }

以避免启动登录页面。在改造响应中把这个

  tokenManager.saveToken(response.body());

最后不要忘记声明访问令牌模型

  public class AccessToken {
    String token_type;
    int expires_in;
    String access_token;
    String refresh_token;
}

希望对您有所帮助。

最新更新