如何使用laravel 5.7中的改型发送api从android创建passport令牌,还有比passport更好的身份验证选项吗

如何使用laravel 5.7中的改型发送api从android创建passport令牌,还有比passport更好的身份验证选项吗,android,laravel,retrofit,laravel-passport,Android,Laravel,Retrofit,Laravel Passport,Android改造应该创建passport令牌并发送到laravel rest api,还应该添加到数据库中。在laravel5.7和android中有比passport更好的选项吗?你不能在android中创建令牌,你只需要在RegisterController中发送你的信息 $this->validator($request->all())->validate(); event(new Registered($user = $this->create($

Android改造应该创建passport令牌并发送到laravel rest api,还应该添加到数据库中。在laravel5.7和android中有比passport更好的选项吗?

你不能在android中创建令牌,你只需要在RegisterController中发送你的信息

  $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);
然后,它将返回到您的
访问\u令牌
过期时间

在android中,您需要将令牌保存在SharedReferences中

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);

}
然后检查是否为空

if (tokenManager.getToken().getAccess_token() != null) {
        startActivity(new Intent(LoginActivity.this, MenuDrawerProfileActivity.class));
        finish();
    }
避免启动登录页面。 在改装响应中,请将此

  tokenManager.saveToken(response.body());
最后,不要忘记声明AccessToken模型

  public class AccessToken {

    String token_type;
    int expires_in;
    String access_token;
    String refresh_token;
}

希望它对您有所帮助。

您无法在android中创建令牌,您只需在RegisterController中发送您的信息即可

  $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);
然后,它将返回到您的
访问\u令牌
过期时间

在android中,您需要将令牌保存在SharedReferences中

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);

}
然后检查是否为空

if (tokenManager.getToken().getAccess_token() != null) {
        startActivity(new Intent(LoginActivity.this, MenuDrawerProfileActivity.class));
        finish();
    }
避免启动登录页面。 在改装响应中,请将此

  tokenManager.saveToken(response.body());
最后,不要忘记声明AccessToken模型

  public class AccessToken {

    String token_type;
    int expires_in;
    String access_token;
    String refresh_token;
}
希望对你有帮助