Using the $q service in AngularJS to handle promises
Things that could have been better;


This:

        },    
        function(error) {
            deferred.reject(error);
        }
    );


could simply be

        }, deferred.reject );   


reject is a function that takes error as a parameter after all..
I would have externalized the previewSessionResource.save(call, it makes the reading too hard. You only capture settings and appResponse which you would then provide as parameters.
If you control the signature of previewSessionResource.save, then I would simply request for settings as an object instead of requesting for { settings: settings } to keep it simple, it does not make sense to wrap a single data point into an object.
I am also idly wondering if previewSessionResource.save should not be responsible for calling $localForage.setItem(), would you ever call previewSessionResource.save without calling $localForage.setItem()?


On the whole, I think this is okay, it just needs some rejiggering to read better.