Войдите в веб-приложение катализатора из собственного приложения - PullRequest
0 голосов
/ 05 июня 2018

У меня есть веб-приложение Catalyst, и я спрашиваю себя, можно ли войти в это приложение из соответствующего мобильного приложения, работающего в режиме реакции?Аутентификация и авторизация работают уже в приложении катализатора.

Спасибо

РЕДАКТИРОВАТЬ 1

Я попытался сделать POSTзапрос, но я получаю «Сетевой запрос не удался».Сервер катализатора работает.

Образец используемой мной собственной трески трески

export default class Login extends Component<{}> {
  constructor(props){
    super(props);
    this.state = {
      username: "",
      password:"",
    }
  }

  async _onLoginPressed(){
    try {
      let response = await fetch('http://localhost:port_number/login', {
        method:'POST',
        headers:{
          'Accept':'application/json',
          'Content-Type':'application/json'
        },
        body: JSON.stringify({
            username: this.state.username,
            password: this.state.password,
        })
      });
      let res = await response;
      console.log('response:' + res);
    } catch (err) {
      console.log(err);
    }
  }

  render() {
    return (
      <View style={styles.container}>
        <TextInput
          placeholder="username"
          returnKeyType="next"
          style={styles.input}
          onSubmitEditing={() => this.passwordInput.focus()}
          keyboardType="default"
          autoCorrect={false}
          onChangeText={(value) => this.setState({username: value})}
          value={this.state.username}
          />
          <TextInput
            placeholder="password"
            secureTextEntry={true}
            returnKeyType="go"
            style={styles.input}
            ref={(input) => this.passwordInput = input}
            keyboardType="default"
            autoCapitalize="none"
            autoCorrect={false}
            onChangeText={(value) => this.setState({password: value})}
            value={this.state.password}
            />
          <TouchableOpacity style={styles.buttonContainer} onPress={this._onLoginPressed.bind(this)}>
            <Text style={styles.buttonText}> LOGIN</Text>
          </TouchableOpacity>
      </View>
    );
  }
}

И контроллер login.pm из веб-приложения катализатора:

sub index :Path :Args(0) :FormConfig {
    my ( $self, $c ) = @_;
    my $form = $c->stash->{form};

    # Get the username and password from form
    my $username = $c->request->params->{username};
    my $password = $c->request->params->{password};

    # If the username and password values were found in form
    if ($username && $password) {
        # Attempt to log the user in
        if ($c->authenticate({ username => $username,
                                   password => $password  } )) {
            # If successful, then let them use the application

                $c->response->redirect($c->uri_for(
                  $c->controller('Root')->action_for('index')));
                return;
        #    Set an error message
            #    $c->stash(error_msg => "Renew");
        #}
            } else {
                # Set an error message
                $c->stash(error_msg => "Incorrect parameter(s)");
            }
        } else {
            # Set an error message
            $c->stash(error_msg => "Empty parameter(s)")
                unless ($c->user_exists);
    }
    if ($c->user_exists) {
        if(DateTime->compare($c->user->get('expiration_date'),DateTime->now) == -1) {
            $c->stash(error_msg => "Renew");
        }
    }
    # If either of above don't work out, send to the login page
    $c->stash(template => 'login.tt');
    $c->forward('View::HTML');
}

Я не знаю, должен ли я использовать API аутентификации или нет.Я видел, что JWT может генерировать токены, но я немного озадачен тем, как разные стороны (сервер, веб-приложение, мобильное приложение) используют эти токены.Нужно ли мне писать конкретный код в моем контроллере для обработки этого вида аутентификации?

...