В моем API у меня есть конечная точка / users, которая в данный момент показывает (например, адрес) детали всех зарегистрированных пользователей. Это должно быть доступно для приложения (Ember) (например, для просмотра адреса доставки пользователя), но по понятным причинам я не могу позволить кому-либо иметь возможность просматривать данные (будь то через доступный для просмотра API или в виде простого JSON, если мы ограничиваем представление только использованием JSONRenderer). Я не думаю, что смогу использовать аутентификацию и разрешения, так как приложению необходимо в первый раз войти в систему из внешнего интерфейса (я использую аутентификацию на основе токенов). Например, если я использую аутентификацию в представлении пользователя в Django, я не могу войти в Ember.
Я что-то пропустил?
ОБНОВИТЬ
Привет, я хотел вернуться к этому.
Для аутентификации на стороне Ember я использую Ember Simple Auth и аутентификацию на основе токенов в Django. Все работает нормально - я могу войти в приложение Ember и получить доступ к токену.
Что мне нужно сделать, это получить доступ к пользователю; для этого я воспользовался примером кода здесь https://github.com/simplabs/ember-simple-auth/blob/master/guides/managing-current-user.md
Я проверил аутентификацию на основе токенов в Postman, используя токен для моего вошедшего в систему пользователя - и могу получить доступ к конечной точке / users. (Это возвращает всех пользователей - я хочу только для пользователя, для которого у меня есть токен, который нужно вернуть, но это на потом!).
Вопрос в том, как передать заголовок (токен) в любых запросах Ember, например:
this.store.findAll('user') .... etc
Это явно не происходит в настоящее время, и я не уверен, как это исправить.
ОБНОВИТЬ
Починил это. Оказывается, функция авторизации в моем адаптере приложения не устанавливала заголовки, поэтому изменили код для явной установки заголовков:
authorize(xhr) {
let { access_token } = this.get('session.data.authenticated');
if (isPresent(access_token)) {
xhr.setRequestHeader('Authorization', `Token ${access_token}`);
}
},
headers: computed('session.data.authenticated.token', function () {
const headers = {};
if (this.session.isAuthenticated) {
headers['Authorization'] = `Token ${this.session.data.authenticated.token}`
}
return headers;
})
Всего 1 ответ
Эмбер - это основа для создания СПА. Они запускаются в браузере. Таким образом, чтобы Ember получил данные, вы должны отправить данные в браузер.
Браузер полностью находится под контролем пользователя. Браузер - это программное обеспечение, которое работает для них, а не для владельца сайта.
Любые данные, которые вы отправляете в браузер, пользователь может получить доступ. Полная остановка.
Если вы хотите ограничить, какие биты данных пользователь может читать из API, то вам нужно написать логику, чтобы применить эти ограничения на стороне сервера и не зависеть от кода Ember на стороне клиента для фильтрации битов, которые вы не делаете. Я не хочу, чтобы пользователь видел.
Я не думаю, что смогу использовать аутентификацию и разрешения, так как приложению необходимо в первый раз войти в систему из внешнего интерфейса (я использую аутентификацию на основе токенов). Например, если я использую аутентификацию в представлении пользователя в Django, я не могу войти в Ember.
Это на самом деле не имеет смысла.
Как правило, это должно произойти: